1

簡単な構文の c# の質問はこれです。

このコードを考えると:

List<string> Columns = new List<string>();
List<string> Parameters = new List<string>();
List<string> Values = new List<string>();

次のように減らすことができます。

List<string> Columns = new List<string>(), Parameters = new List<string>(), Values = new List<string>();

しかし、それらはすべて空のリストに初期化されているため、さらに短くすることはできますか?

皆さん、ありがとうございました!

4

5 に答える 5

14

varこれらの変数がクラスフィールドでない場合は、キーワードを使用することをお勧めします。これは、タイプが使用法からわかっているためです。3つの変数のフラット宣言は実際には意味がありません。

var Columns = new List<string>();
var Parameters = new List<string>();
var Values = new List<string>();

はい、1行で複数のローカル変数を宣言し、それらを1行で初期化するなどのことができます。ただし、1行で複数の変数を宣言することは避けてください。コードが読みやすくなります。

于 2013-01-16T16:18:22.060 に答える
4

純粋にトリビア/コード ゴルフのポイントとして:

Func<List<string>> n = () => new List<string>();
List<string> a = n(), b = n(), c = n(), d = n(), e = n(), f = n();

しかし、これを利用可能なより明確な構造の代わりに使用するのはばかげています。初期化がより複雑で、コードの名前と間隔が適切であれば、価値があるかもしれません。

Func<List<string>> setupFoo = () => {
    return new List<string>() { 1, 2, 3 };
};

var option1 = setupFoo();
var option2 = setupFoo();
var option3 = setupFoo();
于 2013-01-16T16:24:29.380 に答える
2

これは良い方法ではありませんが、1 つの .cs ファイル内で多数の文字列リストを初期化する場合は、ファイルの他のusingステートメントを使用してクラスのエイリアスを追加できます。

using StringList = List<string>;

そして、それらを宣言して初期化するコードは次のようになります。

StringList Columns = new StringList(), 
           Parameters = new StringList(), 
           Values = new StringList();
于 2013-01-16T16:24:04.127 に答える
2

You can't shorten anymore.

You could use some kind of "empty list factory":

public static List<string> EmptySList()
{
    return EmptyList<string>();
}

public static List<T> EmptyList<T>()
{
    return new List<T>();
}

...

List<string> Columns = EmptySList(), Parameters = EmptySList(), Values = EmptySList();

Honestly, you probably don't want to shorten your code. Just write something readable and maintainable:

var columns = new List<string>();
var parameters = new List<string>();
var values = new List<string>();
于 2013-01-16T16:25:19.483 に答える
-1

IEnumerable は、コレクションの最も基本的なインターフェイスです。
これを使用すると、任意のタイプのコレクションを動的にインスタンス化できます。

空のリストには、 を使用します。

Enumerable.Empty<TYPE>();

あなたの例では...

using using System.Collections.Generic;
...
IEnumerable<string> Columns = Enumerable.Empty<string>();
IEnumerable<string> Parameters = Enumerable.Empty<string>();
IEnumerable<string> Values = Enumerable.Empty<string>();
于 2020-11-30T20:44:38.807 に答える