如何检查数据类型和比较相同的格式

时间:2017-09-16 07:42:59

标签: c#

object[] RA= {"Ram",123,122};
for(int i = 0;i< RA.Length;i++)
{
    if(RA[i].GetType().toSting()=="System.String")
    { 
        print('string');
    }
    else
    {
        print('int');
    }
}

输出:

string
int
int

我可以使用GetType()而我已经尝试但是它显示了一个我可以比较的错误。这个问题怎么解决?

4 个答案:

答案 0 :(得分:2)

我接近它的方式有点不同:

  • 由于您想要迭代集合的项目并且索引无关紧要,我会使用foreach loop
  • 我没有致电GetType并使用typeof,而是使用is operator

合:

object[] RA = { "Ram", 123, 122 };
foreach(var item in RA)
{
    if (item is string)
    {
        Console.WriteLine("string");
    }
    else
    {
        Console.WriteLine("int");
    }
}

此外,更进一步,我将添加ternary operator

的使用
object[] RA = { "Ram", 123, 122 };
foreach(var item in RA)
{
    Console.WriteLine(item is string ? "string" : "int");
}

请注意,如果您想要类型名称(而不是全名),请使用:

Console.WriteLine(item.GetType().Name);

答案 1 :(得分:1)

因为问题是在C#标签中提出的,所以我正在回答关于C#的问题 这给出了你期望的输出

 object[] RA= {"Ram",123,122};
for(int i = 0;i< RA.Length;i++)
{
  if(RA[i].GetType() == typeof(string))
  { 
     Console.WriteLine("string");
  }
  else
  {
     Console.WriteLine("int");
  }
}

答案 2 :(得分:0)

如果您还希望数组中的值采用其本机类型,那么从C#7开始,您可以使用模式匹配:

object[] RA = { "Ram", 123, 122 };
for (int i = 0; i <  RA.Length; i++) {
  var r = RA[i];
  if (r is string s) {
    Console.WriteLine($"{i}: string \"{s}\"");
  } else if (r is int x) {
    Console.WriteLine($"{i}: int {x}");
  } else {
    Console.WriteLine($"{i}: {r.GetType().Name}");
  }
}

答案 3 :(得分:0)

当您使用 Visual Studio 2017 C#7.0 时,您终于可以在类型上使用switch

  

What's New in C# 7.0 - 使用模式切换语句

switch(shape)
{
    case Circle c:
        WriteLine($"circle with radius {c.Radius}");
        break;
    case Rectangle s when (s.Length == s.Height):
        WriteLine($"{s.Length} x {s.Height} square");
        break;
    case Rectangle r:
        WriteLine($"{r.Length} x {r.Height} rectangle");
        break;
    default:
        WriteLine("<unknown shape>");
        break;
    case null:
        throw new ArgumentNullException(nameof(shape));
}

应用于您的代码:

object[] RA= {"Ram",123,122};
for(int idx = 0; idx < RA.Length; idx++)
{
    switch(RA[idx])
    { 
        case string s:
            Console.WriteLine($"The type of {s} is string");
            break;
        case int i:
            Console.WriteLine($"The type of {i} is int");
            break;
        default:
            Console.WriteLine($"The type of {RA[idx]} is {RA[idx].GetType().Name}");
            break;
    }
}