2013-08-19 36 views
3

我想创建一个方法接收3个字符串作为参数,并返回一个包含它们引用这些字符串的三个属性的对象。将属性添加到c中的反射对象#

没有“旧对象”进行复制。这个属性应该用这个方法创建。

是在C#中用反射来做到这一点吗?如果是这样,怎么样?以下是你喜欢的,我无法做到的。

protected Object getNewObject(String name, String phone, String email) 
{ 
    Object newObject = new Object(); 

    ... //I can not add the variables that received by the object parameter here. 

    return newObject(); 
} 
+1

如何你会然后*访问*这些属性?就动态访问而言,动态对象可能是您可以轻松实现的最接近的功能。我们确实需要更多的背景。 –

+1

这些属性取自哪里? “oldObject”在哪里? – xanatos

回答

1

使用Expando的对象是一个完整的例子像这样

protected dynamic getNewObject(String name, String phone, String email) 
    { 


     // ... //I can not add the variables that received by the object parameter here. 
     dynamic ex = new ExpandoObject(); 
     ex.Name = name; 
     ex.Phone = phone; 
     ex.Email = email; 
     return ex; 
    } 

    private void button1_Click_2(object sender, EventArgs e) 
    { 
     var ye = getNewObject("1", "2", "3"); 
     Console.WriteLine(string.Format("Name = {0},Phone = {1},Email={2}", ye.Name, ye.Phone, ye.Email)); 
    } 
3
protected dynamic getNewObject(String name, String phone, String email) 
{ 
    return new { name = name, phone = phone, email = email }; 
} 
+0

@Downvoter为什么这不好?似乎是正确的答案。 –

+0

这是正确的答案。使用反射添加属性不是解决方案,他将无法在未经反思的情况下访问它们。如果是这样的话,为什么不创建一个班?不妨使用'dynamic'。 – Artless

+1

我没有downvote你,但技术上它应该是:return new {name = GetWithReflectionTheNameOfSomething(),phone = GetWith ...(),email = GetWith ...()}; – xanatos

0
protected Object getNewObject(String name, String phone, String email) 
{ 
    Object newObject = new 
         { 
          name = name, 
          phone = phone, 
          email = email 
         }; 

    return newObject; 
} 

而且, 有多种方法获得的价值,从一个匿名对象返回:

比如,使用dynamic型或反射

dynamic ob = getNewObject("Safeer", "0112345678", "[email protected]"); 
var nm = ob.name; // "Safeer" 

请看:How can I get a value of a property from an anonymous type?