0

这个问题与这个问题有关(但不重复)。考虑到我对 C# 相当陌生。如果可能的话,我想获取尚未实例化的对象的成员的句柄,以便以后使用它。在上一个问题之后,我想做类似的事情

List<Action<YourClass>> lst = new List<Action<YourClass>>;

lst.Add(x => x.Member1);
lst.Add(x => x.Member2);

Member1 和 Member2 不应该是静态成员,因为它们的值取决于它们所属的对象的状态。基本上我想要他们的“名字”的句柄,这样我可以在以后实例化对象时使用它。我正在考虑一种基于字符串的方法,其值为成员名称,但也许有更好的方法?谢谢。

4

2 回答 2

0

我不确定我是否理解正确。首先,您需要从列表中创建一个实例。

List<Action<YourClass>> lst = new List<Action<YourClass>>;

否则,您的 Add 将因 NullReference-Exception 而中断。您在 Add 中使用的内容称为匿名函数,因为未保存句柄。如果您想存储它,您需要一个委托。在这个委托上,您可以调用 Invoke-Methode 来调用它。您可以创建您的代理以及使用预定义的操作,如操作。

这是一个没有任何意义的小例子,但也许可以澄清一下:

    var action = new Action<string>(x => x = x.Substring(1, 1));
    //Do some other stuff
    action.Invoke("Hallo");

注意使用了 var 关键字。它检测新 Action 的结果并采用 this 的类型。在这种情况下,它持有 Action。

进一步注意,Action 是一个预定义的委托。另一个是 Func,它得到一个返回值。如果您需要其他行为,您可以轻松创建自己的委托。为此,您应该阅读链接。

于 2016-10-19T09:38:06.593 回答
0

感谢 Henk 评论,我找到了解决方案:

Func<myObj, Vector> getVect = new Func<myObj, Vector> 
getVect= (myObj => myObj.objVector);

其中 objVector 不是方法,而是 myObj 的成员。我以这种方式调用 getVect:

Vector a= getVect(someObj)
于 2016-10-19T10:36:14.710 回答