8

Jsonの匿名タイプを返します:

IList<MyClass> listOfStuff = GetListOfStuff();

return Json(
   new {
       stuff = listOfStuff
   }
);

場合によっては、それlistOfStuffが空になることを私は知っています。GetListOfStuff()したがって、(データベース呼び出しを行う)呼び出しのオーバーヘッドは必要ありません。

したがって、この場合、私は次のように書いています。

return Json(
   new {
       stuff = new List<ListOfStuff>()
   }
);

これは少し不必要に冗長に思えます。Listとにかく空なので、どんなタイプでも構いません。

空の列挙可能/リスト/配列を示すために使用できる省略形はありますか?何かのようなもの:

return Json(
   new {
       stuff = new []
   }
);

または、JavaScriptのプログラミングが長すぎますか?:)

4

7 に答える 7

7

基本的に、空の配列を出力する必要があります。C#は引数から配列の型を推測できますが、空の配列の場合は、型を指定する必要があります。あなたのオリジナルのやり方で十分だと思います。または、これを行うことができます:

return Json(
   new {
       stuff = new ListOfStuff[]{}
   }
);

[]空の列挙型はJSONに変換されるため、配列のタイプは実際には重要ではありません。読みやすくするために、空の配列のタイプを指定してください。このように、他の人があなたのコードを読むとき、そのメンバーが何であるかがより明白になります。

于 2010-08-02T23:01:51.390 に答える
4

Enumerable.Emptyもう少し明確にするために使用できます:

return Json(
    new {
        stuff = Enumerable.Empty<ListOfStuff>()
    }
);

短くはなく、type引数を削除しませんが。

于 2010-08-02T22:53:51.723 に答える
2

リストの種類は気にしないかもしれませんが、発信者にとっては重要です。C#は通常、格納されている変数に基づいて型を推測しようとはしません(戻り型でメソッドのオーバーロードを作成できないのと同じように)。そのため、型を指定する必要があります。そうは言ってもnew ListOfStuff[0]、空の配列を返したい場合に使用できます。IList<T>これには、呼び出し元に対して(長さが)不変であるという効果があります(長さを変更するメソッドを呼び出そうとすると、例外が発生します)。

于 2010-08-02T22:42:03.220 に答える
2

はいあります。少なくとも1つの要素を含む配列を定義し、linqを使用して要素を残さずに配列をフィルター処理する必要があります。例:

var foo = new
{
    Code = 1,
    Name = "Bar",
    Value = (float?)5.0
};

//use an empty object (or any object) to define the type of the array
var emptyArrayOfFooType = new[] {
    new
    {
        Code = (int)0,
        Name = (string)null,
        Value = (float?)null
    }
}.Where(e => false).ToArray(); //use linq to filter the array leaving no elements

//you can use an existing anonymous type variable too
var anotherEmptyArray = new[] { foo }.Where(e => false).ToArray();

//this array with one element has the same type of the previous two arrays
var fooArray = new[] { foo };

//all arrays have the same type, so you can combine them
var combinedArrays = emptyArrayOfFooType.Concat(anotherEmptyArray).Union(fooArray);
于 2016-04-14T16:16:33.277 に答える
2

dynamic匿名タイプを扱う場合にも良いオプションです

Enumerable.Empty<dynamic>()

これは私にとってうまくいきました

于 2019-09-11T11:36:11.853 に答える
1

ジェネリック型を送信しますか?:

List<Object>()

または、空のオブジェクト配列を送信します。new Object[0]

于 2010-08-02T22:29:27.207 に答える
-4

ここでC#について話していると思います。私の知識はC#で限られていますが、型のない新しいオブジェクトを作成することはできないと思います。一般的な新しいList[]を返されないのはなぜですか?(ここではJavaジェネリックが混在している可能性がありますが、C#でジェネリック型リストを返すことができるかどうかはわかりません)。

于 2010-08-02T17:19:30.947 に答える