在没有使用类的情况下,c#中javascript对象的替代是什么?

时间:2014-01-21 08:25:13

标签: 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 object GetObject(string val){

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

这是无效的,不是吗?

3 个答案:

答案 0 :(得分:3)

.Net从.NET 4开始支持ExpandoObject

http://msdn.microsoft.com/en-us/library/system.dynamic.expandoobject%28v=vs.110%29.aspx

它允许您声明对象并在javascript中添加属性。

传统上它适用于JS互操作,我不能推荐它用于生产工作。 Tuple<T>更合适,因为您可以免费获得强力打字。最终,您将编写更少的代码并减少运行时错误。

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

答案 1 :(得分:1)

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

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

修改

选中此MSDN article

答案 2 :(得分:0)

事实证明,互联网上有一个天才posted this:

public void Message()
{
   var obj=GetObject("Irshu");
   var y=  Cast(obj, new { ind= "", flag= true });
   Messagebox.Show(y.ind); //alerts Irshu
}

public object GetObject(string val){

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

T Cast<T>(object obj, T type)
{
  return (T)obj;
}