1

my method look something like:

Boolean actions(List<Object> input)
{
    if (input.element is String)
    {...}
    else if (input.element is PSObject)
    {...}
}

I tried input.getType().GetGenericArguments()[0] == new PSObject().GetType())

but input.getType().GetGenericArguments()[0] says it is object type...


Check whether the app.config file exists or not in console app C#

I create a console app in C#. I want to use an app.config file in my project.

My problem is: before reading from app.config, I want to make sure that the app.config exists. How to check it?

Please help me! Thanks all

4

3 に答える 3

7

おそらく、あなたの問題はinput.element、リストからアイテムを取得するために使用しようとしているだけです. これは、リスト内の要素の型を確認する正しい方法ではありません。

これを使用して、最初の項目のみをテストします。

bool actions(List<Object> input)
{
    var element = input.FirstOrDefault();
    if (element is String)
    {...}
    else if (element is PSObject)
    {...}
}

または、これで各アイテムを個別にテストできます。

bool actions(List<Object> input)
{
    foreach (var element in input)
    {
        if (element is String)
        {...}
        else if (element is PSObject)
        {...}
    }
}

または、リストのすべての要素が特定の型であることを確認したい場合は、ジェネリックを使用できます。

bool actions<T>(List<T> input)
{
    if (typeof(String).IsAssignableFrom(typeof(T))
    {...}
    else if (typeof(PSObject).IsAssignableFrom(typeof(T))
    {...}
}
于 2013-03-15T19:26:54.320 に答える
2

しかし、input.getType()。GetGenericArguments()[0]はそれがオブジェクトタイプであると言っています...

まあ、List<T>不変であるように、渡されたリストのジェネリック引数は常にメソッドパラメータのジェネリック引数と正確に一致します。

この場合、リストは常にsのリストになりobjectます。

現在、リスト内の各項目はobject(最も派生した型であるため)ではなく、文字列またはである可能性がありますPSObjectただし、それらすべてが。以外のタイプであると想定することはできませんobject

したがって、リスト内の特定のアイテムに対してより派生したタイプがあるかどうかを確認できますが、リスト全体ではないかどうかを確認できます。

したがって、次のようにコードをリファクタリングする必要がある可能性が高くなります。

Boolean actions(List<Object> input)
{
    foreach(object element in input)
    {
        if (element is String)
        {...}
        else if (element is PSObject)
        {...}
    }
}

すべてのアイテムが同じタイプであることが重要な場合は、ジェネリックを使用できます。

Boolean actions<T>(List<T> input)
{
    if (typeof(T) == typeof(string))
    {...}
    if(typeof(T) == typeof(PSObject))
    {...}
}
于 2013-03-15T19:29:37.083 に答える
2

リストのタイプではなく、リスト内のインスタンスのタイプを取得する必要があります。

Boolean actions(List<Object> input) {
  foreach (object o in input) {
    if (o is String) {
      ...
    } else if (o is PSObject) {
      ...
    }
  }
}

または、リスト内のすべてのオブジェクトが同じタイプであることがわかっている場合は、最初のアイテム ( input[0]) のタイプを確認し、それに応じてすべてのアイテムに対して同じことを行うことができます。

于 2013-03-15T19:28:32.640 に答える