首先,我搜索了这个,我在Stack Overflow上找到了以下链接:
但是我对这个答案并不满意,它没有得到很好的解释(我说得不好).基本上,我想知道的区别 new object()和new {}.如何,它们在编译时和运行时处理?
其次,我WebMethods在我的asp.net简单应用程序中使用了以下代码
[WebMethod]
[ScriptMethod(UseHttpGet = false)]
public static object SaveMenus(MenuManager proParams)
{
object data = new { }; // here im creating an instance of an 'object' and i have typed it `new {}` but not `new object(){}`.
try
{
MenuManager menu = new MenuManager();
menu.Name = proParams.Name;
menu.Icon = proParams.Icon;
bool status = menu.MenuSave(menu);
if (status)
{
// however, here i'm returning an anonymous type
data = new
{
status = true,
message = "Successfully Done!"
};
}
}
catch (Exception ex)
{
data = new { status = false, message = ex.Message.ToString() };
}
return data;
}
Run Code Online (Sandbox Code Playgroud)
那么,(正如你在代码中的评论中看到的),如何new object(){}和new {}差异?
这是我编写代码的正确方法吗? 你能为这段代码建议一个最好的方法吗?
我知道,我不能很好地解释它,我要求很多,但这是我现在最好的.
Dmi*_*nko 49
new {...}总是创建一个匿名对象,例如:
Object sample = new {};
String sampleName = sample.GetType().Name; // <- something like "<>f__AnonymousType0"
// not "Object"
Run Code Online (Sandbox Code Playgroud)
同时new Object()创建一个Object类的实例
Object sample = new Object() {};
String sampleName = sample.GetType().Name; // <- "Object"
Run Code Online (Sandbox Code Playgroud)
由于所有对象(包括匿名对象)都是从中派生出来的,因此Object您始终可以键入
Object sample = new {};
Run Code Online (Sandbox Code Playgroud)
NPS*_*000 12
看之间的差别new Object()和new {}与new Object(){}......为什么我们不知道的?
Console.WriteLine(new Object().GetType().ToString());
Console.WriteLine(new Object() { }.GetType().ToString());
Console.WriteLine(new { }.GetType().ToString());
Run Code Online (Sandbox Code Playgroud)
前两个只是创建对象和打印的不同方式System.Object.第三个实际上是一个匿名类型和打印<>f__AnonymousType0.
我想你可能会对'{}'的不同用法感到困惑.在我的头顶,它可以用于:
所以,总之object data = new { };不会创建一个新对象.它创建一个新的AnonymousType,与所有类一样,结构,枚举和委托继承Object,因此可以为其分配.
正如评论中所提到的,当返回匿名类型时,您仍然会将它们声明并向下转换为Object.但是,它们仍然是不同的东西,并且具有一些实现差异,例如:
static void Main(string[] args)
{
Console.WriteLine(ReturnO(true).ToString()); //"{ }"
Console.WriteLine(ReturnO(false).ToString()); // "System.Object"
Console.WriteLine(ReturnO(true).Equals(ReturnO(true))); //True
Console.WriteLine(ReturnO(false).Equals(ReturnO(false))); //False
Console.WriteLine(ReturnO(false).Equals(ReturnO(true))); //False
Console.WriteLine(ReturnO(true).GetHashCode()); //0
Console.WriteLine(ReturnO(false).GetHashCode()); //37121646
Console.ReadLine();
}
static object ReturnO(bool anonymous)
{
if (anonymous) return new { };
return new object();
}
Run Code Online (Sandbox Code Playgroud)
new{ }创建一个没有成员的匿名类型的实例.这与创建实例不同object.但是几乎所有类型都可以将匿名类型分配给对象.
object data = new { };
Console.WriteLine(data.GetType().Name)
Run Code Online (Sandbox Code Playgroud)
清楚地显示自动生成的名称,而不是Object.
| 归档时间: |
|
| 查看次数: |
32081 次 |
| 最近记录: |