1

いくつかのコード ブロックがあり、同じオブジェクトをブロックの外で使用する必要があります。次のような強力な型を使用できます。

Person p = null;
if(cond1)
{
    p = new Person();
    p.Name = "Name1";
    p.Age = 25;
}
else if (cond2)
{    
    p = Employees.Select(c=>new Person() {Name = c.FirstName + " " +c.LastName }).First();
    p.Age = 23;
}

if(p != null)
{
    Console.Write(p.Name);
}

人の代わりに匿名型を介してそれを行う必要があります。プロパティ名に名前が付けられていないためタプルを使用できず、そのようなものが必要になるたびに小さなクラスを作成することはできません。これは非常に単純なケースですが、どうですかLINQ は私の例に似たブロックになりますか?

4

3 に答える 3

4

こういうのはどうですか

        var person = new { Name = "" }; ;

        if (cond1)
        {
            person  = new { Name = "Bob" };
        }
        else
        {
            person  = new { Name = "John" };
        }

        Console.WriteLine(person.Name);
于 2012-12-20T10:05:55.317 に答える
1

匿名タイプを使用する必要がないように、ビジネスオブジェクトを作成することをお勧めします。しかし、問題に対するいくつかの簡単な修正は、リフレクションを使用するか、動的タイプとして渡すことです。

編集:

ああ、Console.Write()(または他の関数)で使用できるプロパティを指定する必要がないように、型にあるプロパティを制限する目的で新しいサブタイプを作成しているだけですか?クエリ元のデータはこれらの関数の外部で利用できると思います。強く型付けされている場合は、匿名型を作成する必要はなく、それらの型を使用するだけです...ただし、コンソールで指定する必要があります。印刷するプロパティのWrite()行。これが私がお勧めするものです。

于 2012-12-20T10:05:21.747 に答える
1

交換してみてはいかがですか

Person p = null;

dynamic p = null;
于 2012-12-20T10:04:15.757 に答える