从另一个方法访问对象c#

时间:2011-11-29 22:52:19

标签: c# c#-4.0

我有一个返回对象的方法:

private object myObjectMethod(){ 
    //...
    return myObject;
}

但是在另一种方法中我想要检索这个对象:

private void myotherMethod(){   
    var x = myObjectMethod();
    // Now how would I access the properties of myObject?
}

4 个答案:

答案 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;