我有一个类,原本返回字符串类型。现在我发现需要返回的不仅仅是字符串。我考虑返回类似下面的内容:
public string Test()
{
return ( new { ID = 5, Name= "Dave" } );
}
这种情况是否可能发生,如果是,返回类型会是什么?我知道它不是字符串类型...
我有一个类,原本返回字符串类型。现在我发现需要返回的不仅仅是字符串。我考虑返回类似下面的内容:
public string Test()
{
return ( new { ID = 5, Name= "Dave" } );
}
static T CastByExample<T>(object source, T example) where T : class
{
return source as T;
}
static object ReturnsAnonymous() { return new { X = 123 }; }
static void DoIt()
{
object obj = ReturnsAnonymous();
var example = new { X = 0 };
var anon = CastByExample(obj, example);
Console.WriteLine(anon.X); // 123
}
你返回的对象确实有一个类,但它是匿名的,所以你不能在代码中指定它。你只需要将它作为一个object
引用返回:
public object Test() {
return new { ID = 5, Name= "Dave" };
}
请注意匿名类型只在该方法范围内被识别,因此反射是访问其属性的唯一方式。
如果你想要方便地使用返回的对象,应该声明一个类:
public class TestResult
{
public int ID { get; set; }
public string Name { get; set; }
}
public TestResult Test() {
return new TestResult() { ID = 5, Name= "Dave" };
}
另一种选择是使用现有的类,如果它符合您的目的。一个 KeyValuePair
类型接近于您使用的类型,但是属性名称当然将被命名为 Key
和 Value
而不是 ID
和 Name
:
public KeyValuePair<int, string> Test() {
return new KeyValuePair<int, string>(5, "Dave");
}
dynamic
访问其属性。 :) - Timwipublic struct IdAndName
{
public int Id;
public string Name;
public IdAndName(int id, string name)
{
ID = id;
Name = name;
}
}
你也可以使用一个元组<T1, T2>,(但不推荐,因为属性没有命名)。
class NewString
{
public int ID { get; set; }
public string Name { get; set; }
}
public NewString Test()
{
return ( new NewString() { ID = 5, Name = "Dave" } );
}
:)
这是不可能的,因为匿名类只在当前上下文中有效。如果您需要返回一个对象,则需要创建一个真正的类。
我假设您意外地将 string
作为返回类型。
不可能。你的选择有:
object
,那么返回类型肯定是object
。 - Duncan Howe