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()
而我已经尝试但是它显示了一个我可以比较的错误。这个问题怎么解决?
答案 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;
}
}