C# . 您可以解析它们以返回一个对象,但随后需要创建一个对象的具体版本以发送回调用方。很多时候,您得到的XML变化很大,需要创建许多类来处理它。如果您可以使用LinqToXml作为var构建对象,然后返回该值,这不是很好吗?当您开始在其他上下文中使用MyNum

C# . 您可以解析它们以返回一个对象,但随后需要创建一个对象的具体版本以发送回调用方。很多时候,您得到的XML变化很大,需要创建许多类来处理它。如果您可以使用LinqToXml作为var构建对象,然后返回该值,这不是很好吗?当您开始在其他上下文中使用MyNum,c#,.net,linq,c#-4.0,anonymous-types,C#,.net,Linq,C# 4.0,Anonymous Types,. 您可以解析它们以返回一个对象,但随后需要创建一个对象的具体版本以发送回调用方。很多时候,您得到的XML变化很大,需要创建许多类来处理它。如果您可以使用LinqToXml作为var构建对象,然后返回该值,这不是很好吗?当您开始在其他上下文中使用MyNumbers时,这会变得非常糟糕。如果您使用的是跨方法边界的类型,那么如果该类型没有像您建议的那样内联声明,那么它的可维护性和可读性会更好。+1到spoon16的注释。虽然我认为您可以在编译器中添加一些智能来缓解这些问题。我认为让它不难看的关键是使



. 您可以解析它们以返回一个对象,但随后需要创建一个对象的具体版本以发送回调用方。很多时候,您得到的XML变化很大,需要创建许多类来处理它。如果您可以使用LinqToXml作为var构建对象,然后返回该值,这不是很好吗?

当您开始在其他上下文中使用MyNumbers时,这会变得非常糟糕。如果您使用的是跨方法边界的类型,那么如果该类型没有像您建议的那样内联声明,那么它的可维护性和可读性会更好。+1到spoon16的注释。虽然我认为您可以在编译器中添加一些智能来缓解这些问题。我认为让它不难看的关键是使用单独的语法来命名类型,vs创建值的语法。请看我的帖子,举个例子。老实说,当我读标题行的时候,我几乎要大便了。即使认真考虑了一下,我也看不出有什么好处。我以前从未见过这种情况。这是一个很酷的把戏。。。虽然我不认为使用这个好技巧通常是一个好主意,尽管anon类型仍然是内部的,我相信因此不能在程序集之间使用。是的,这只是一个黑客,我看不到自己在生产代码中使用它。不过,你应该问问自己,如果你要从另一个程序集引用它,你真的认为匿名类型就是你想要的吗???@BFree他们不是匿名的,因此是“”。我想一个更好的名字应该是自动类型或内联类型。我觉得投票+1代表绝对的辉煌,投票-1代表绝对的丑陋。NET4正在为元组添加BCL支持。例如,BCL中的元组类型不像匿名类型那样将字段名作为类型标识的一部分,因此这不是一回事。我认为不支持具有命名字段的元组是一件坏事。在字段中使用“item1”和“item2”等名称编程的频率如何?也许永远不会,我猜通过我的解决方案,你可以随意命名你的字段。我更喜欢它,而不是第一、第二、第三个元组字段。你可以用我写的做同样的事情。只是元组比整个类定义要短得多。有趣的建议。将其作为参数传递将不是那么干净的public void Foo((int,string,Person)tuple){}为什么是lhs?只是
var tuple=(8,“你好”,newperson())
?会更好。旧帖子但是这比实际存在的var tuple=tuple.Create(8,“hello”,new Person())?很多时候,用胶带将一系列变量绑定在一起是很有用的。我倾向于使用公共字段值类型来实现该目的,如果需要可变或不可变引用语义,则使用简单的泛型
ExposedFieldHolder
ImmutableHolder
。在某些方面,我希望.NET包含两种类型的值——一种是设计为行为类似于对象的值,另一种是设计为使用管道胶带将变量绑定在一起的值。如果像
structuple{public T1 v1;public T2 v2;}
这样的类型可以声明为在装箱时真正不可变……那么
structuple
可以被视为
structuple
的子类型。事实上,所有装箱的结构都是可变的,这使得结构类型协方差即使在其他情况下也是不可能的!我认为D有这个方法返回类型推断。
var me = new { FirstName = "John", LastName = "Smith" };
Console.WriteLine("{0} {1}", me.FirstName, me.LastName);
public T GetMe()
{
    return new { FirstName = "John", LastName = "Smith" };
}
public object GetMe()
{
    return new { FirstName = "John", LastName = "Smith" };
}
var p = new Prog();
object o = p.GetMe();
Type t = o.GetType();
foreach (var prop in t.GetProperties())
{
    Console.WriteLine(prop.Name + ": " + prop.GetValue(o, null));
}
public Person GetMe()
{
    return new public class Person { FirstName = "John", LastName = "Smith" };
}
List<int> list = new List<int>();
var query = from number in list
            select
                new
                    {
                        Number = number,
                        Square = number*number,
                        Absolute = Math.Abs(number),
                        Range = Enumerable.Range(0, number)
                    };
public class MyNumbers
{
    public int Number { get; set; }
    public int Square { get; set; }
    public int Absolute { get; set; }
    public IEnumerable<int> Range { get; set; }
}
List<int> list = new List<int>();
return from number in list
            select new public class MyNumbers
                    {
                        Number = number,
                        Square = number*number,
                        Absolute = Math.Abs(number),
                        Range = Enumerable.Range(0, number)
                    };
public object MyMethod()
    {
        var myNewObject = new
        {
            stringProperty = "Hello, World!",
            intProperty = 1337,
            boolProperty = false
        };

        return myNewObject;
    }

    public T Cast<T>(object obj, T type)
    {
        return (T)obj;
    }
var obj = MyMethod();
var myNewObj = Cast(obj, new { stringProperty = "", intProperty = 0, boolProperty = false });
tuple<int x, int y>
public tuple<int x, int y> GetStuff()
{
}
new { x = 2, y = 2}
public class MyClass
{ properties={ int Number, int Square, int Absolute, IEnumerable<int> Range } }
public var GetMe()
{
    return new { FirstName = "John", LastName = "Smith" };
}
var me = GetMe();
public var GetMeFrom(var names)
{
    return new { FirstName = names["First"], LastName = names["Last"] };
}
(int, string, Person) tuple = (8, "hello", new Person());
Tuple<int,string,Person> tuple = new Tuple<int,string,Person>(8 ,"hello", new Person());
public (int, string, Person) GetTuple(){
    return ...
}
int number = tuple[1];
string text = tuple[2];
Person person = tuple[3];