如何创建 C# 动态对象?

3
在C#中,我需要创建一个函数,该函数返回一个对象,该对象可能包含以下内容:
{ itemID: "A1", itemDesc: "apple" } 

或者

{ groupID: "G1", groupDesc: "group1" } ..etc

// Please don't be concerned about why don't create another function for this,
// or why don't consider 'ID' instead.

我很好奇。原因很简单,在JavaScript中,您可以在不预定义对象的情况下为任何键分配对象。

但是,当涉及到C#时,我感到困惑。

这种情况可能吗?

编辑:

抱歉,我应该更清楚地陈述我的问题(所以它可能不是“重复的”)

我的函数实际上返回一个类,如下所示:

public class MyClass 
{
    public int myKey {get;set;}
    public List<customClass> listRecord {get;set;}
}
< p > customClass 是我所提到的动态 "对象"。请注意,记录是从 LINQ 查询的。

感谢您的建议,但我似乎无法做到这一点:

var result = (from a in db.MyTable
              select new System.Dynamic.ExpandoObject()
              {
                 ....

我无法选择新的动态


5
JavaScript中的对象实际上更接近于C#中的“字典”。根据用途,使用返回字典可能更合适。或者,不要试图用C#编写JavaScript。 - Damien_The_Unbeliever
@Peter Duniho,我已经编辑了我的问题。我认为这不会被视为“重复”,因为存在差异。但是,正如Damien所提到的,我会使用字典进行测试。 - zeroflaw
“我似乎不能做到这个。” 这个问题需要更具体的描述。这个问题可能已经无法解答了,因为你最初提出的问题并不是你想要回答的问题。你需要发布一个新的问题,清晰地表述你的问题。确保在这个帖子中包含一个良好的 [mcve],展示你尝试过什么,并解释那段代码的作用以及你想要得到的结果。一定要详细说明为什么使用字典和 ExpandoObject 都不适合你。 - Peter Duniho
我假设您有智慧,如果字典满足您的需求,就不会发布问题。因此,我的建议是假设两者都不起作用,在这种情况下,您的问题需要包括每个选项不起作用的原因的良好解释。 - Peter Duniho
Peter,我不明白你的假设。但是对于我来说,这里的字典是有效的解决方案。所以在问题被编辑后,我不认为它是重复的。感谢 @Damien_The_Unbeliever。 - zeroflaw
显示剩余2条评论
3个回答

8

3

针对动态类型,C# 有一个 dynamic 关键字,但强烈建议不要使用动态类型。静态类型允许在编译时检查类型并快速失败。

public dynamic Func()
{
    return new { itemID = "A1", itemDesc = "apple" };
}

2

您可以使用动态关键字来完成:

public dynamic GetMyObject()
{
    return new { X= "X", Y= "Y" };
}

而且您可以与之一起使用

dynamic myObject=GetMyObject();
myObject.X;
myObject.Y;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接