C# 在不使用类的情况下,c中javascript对象的替代方法是什么?

C# 在不使用类的情况下,c中javascript对象的替代方法是什么?,c#,.net,C#,.net,在javascript中,我们可以这样声明一个对象 var obj={name:"Irshu",age:22}; console.log(obj); 我们如何在c中实现同样的功能?我之所以问这个问题,是因为我的函数需要同时返回字符串和bool。我不想为它创建一个类,也不想使用字典。还有其他选择吗 public void Message(){ var obj=GetObject(val); Messagebox.Show(Convert.ToString(obj.ind)); } public

在javascript中,我们可以这样声明一个对象

var obj={name:"Irshu",age:22};
console.log(obj);
我们如何在c中实现同样的功能?我之所以问这个问题,是因为我的函数需要同时返回字符串和bool。我不想为它创建一个类,也不想使用字典。还有其他选择吗

public void Message(){
var obj=GetObject(val);
Messagebox.Show(Convert.ToString(obj.ind));
}

public object GetObject(string val){

 return new {ind=val,flag=true};
}

这是无效的,是吗?

您不能从方法返回匿名类型。但是,您可以这样做:

public void Message(){
    var obj = new { ind = "oaiwejf", flag = true };
    Messagebox.Show(obj.ind);
}
编辑


选中此项

无法从方法返回匿名类型。但是,您可以这样做:

public void Message(){
    var obj = new { ind = "oaiwejf", flag = true };
    Messagebox.Show(obj.ind);
}
编辑

检查此项

.Net自.Net 4以来支持ExpandoObject

它允许您像在javascript中一样声明对象和添加属性

传统上,它是用于JS互操作的,我不能推荐它用于生产工作。Tuple更合适,因为您可以免费获得强类型。最终,您将编写更少的代码,看到更少的运行时错误

代码中包含的是匿名类型。匿名类型不能存在于声明它们的范围之外。通常,我们使用它们将LINQ结果转换为临时对象。

.Net从.Net 4开始就支持ExpandoObject

它允许您像在javascript中一样声明对象和添加属性

传统上,它是用于JS互操作的,我不能推荐它用于生产工作。Tuple更合适,因为您可以免费获得强类型。最终,您将编写更少的代码,看到更少的运行时错误


代码中包含的是匿名类型。匿名类型不能存在于声明它们的范围之外。一般来说,我们使用这些工具将LINQ结果转换为临时对象。

事实证明,这是可能的,是互联网上的一个天才


事实证明,这是可能的,互联网上的一个天才


您可以使用元组,尽管访问器的名称很难看,缺乏描述能力,也可以使用动态的ExpandoObject,放弃编译时安全性。我认为这里最有力的建议是使用您正在使用的语言的样式编写代码,不是您熟悉的语言。您可以使用Tuple,尽管访问器的名称难看且缺乏描述能力,也可以使用ExpandoObject的动态名称,并放弃编译时安全性。我认为这里最有力的建议是使用您正在使用的语言的样式编写代码,不是您熟悉的语言。您可以返回匿名类型的实例。只是调用代码在编译时不知道属性是什么。您仍然可以将其作为对象返回,或者甚至dynamicobj.ind将被视为字符串,因此转换是不必要的。嗯,我想您可以将其作为对象返回,尽管我从未真正尝试过。啊,乔恩打败了我:D@siva.k这是正确的。愚蠢的复制粘贴。谢谢你的评论。@SOReader,这里不涉及拳击;匿名类型是引用类型。是的,返回的是对象本身,是对它的引用,实际上,调用方不会静态地知道它的实际类型。你可以返回匿名类型的实例。只是调用代码在编译时不知道属性是什么。您仍然可以将其作为对象返回,或者甚至dynamicobj.ind将被视为字符串,因此转换是不必要的。嗯,我想您可以将其作为对象返回,尽管我从未真正尝试过。啊,乔恩打败了我:D@siva.k这是正确的。愚蠢的复制粘贴。谢谢你的评论。@SOReader,这里不涉及拳击;匿名类型是引用类型。是的,返回的是对象本身,一个对它的引用,实际上,只是调用者不会静态地知道它的实际类型。我不确定我会称之为genius。。。在我看来,这是非常非常糟糕的做法,因为您依赖于自己对GetObject返回内容的了解,而这并不是由任何东西强制执行的。如果更改GetObject的返回值,并且忘记更新消息,编译器将不会警告您。而且,它只在同一个程序集中工作。嗯……原因是我不想声明一个只用于一次性使用的类。除了分配给公共属性,我似乎没有其他选择,GetObject在另一个类中。我不确定我会称之为genius。。。在我看来,这是非常非常糟糕的做法,因为您依赖于自己对GetObject返回内容的了解,而这并不是由任何东西强制执行的。如果更改GetObject的返回值,并且忘记更新消息,编译器将不会警告您。而且,它只在同一个程序集中工作。嗯……原因是我不想声明一个只用于一次性使用的类。除了分配给公共属性,我似乎没有其他选择,GetObject在另一个类中。