我有一个返回对象的方法:
private object myObjectMethod(){
//...
return myObject;
}
但是在另一种方法中我想要检索这个对象:
private void myotherMethod(){
var x = myObjectMethod();
// Now how would I access the properties of myObject?
}
答案 0 :(得分:8)
最好的方法是从方法中返回您正在处理的实际类型
但是,如果这不是一个选项,并且你真的只是从你的方法返回object
,你有几个选择。
如果你知道正确的类型,那么施法将是最简单的方法:
((ActualType)x).SomeProperty;
或者测试演员是否正确:
string val;
if (x is ActualType)
val = (x as ActualType).SomeProperty;
或者,如果您知道属性名称,但不知道x的类型,那么:
PropertyInfo pi = x.GetType().GetProperty("SomeProperty");
string somePropertyValue = (string)pi.GetValue(x, null);
或者,如果您使用的是C#4,则可以使用dynamic
string somePropertyValue = ((dynamic)x).SomeProperty;
请不要因为动态而疯狂。如果您发现自己过度使用dynamic
,则代码可能会出现更深层次的问题。
答案 1 :(得分:5)
更改
private object myObjectMethod(){
...
return myObject;
}
到
private TypeOfMyObject myObjectMethod(){
...
return myObject;
}
答案 2 :(得分:1)
您应该将方法的返回类型更改为您感兴趣的实际课程。 可能你需要改变它对公众的可见度。
您也可以使用反射或投射
(obj as MyObject).Stuff;
答案 3 :(得分:1)
您可以使用方法的通用版本:
public static T MyObjectMethod<T>()
{
return (T)myObject;
}
然后:
var myObject = MyObjectMethod<MyObjectClass>();
myObject.Property;