在一个数组或列表中找到类型相等并执行操作。 C#
find type equality in one array or list and perform operation. C#
如何在一个数组中找到类型相等性。或列出
我正在使用这些 类:
public class Expression
{
public Expression[] Par { get; }
public string Opr { get; }
public Expression(string opr,params Expression[] par)
{
Opr = opr;
Par = par;
}
protected Expression()
{
}
}
public class VarExpression : Expression
{
public char Var { get; set; }
}
public class ConstExpression : Expression
{
public double Val { get; set; }
}
我有 Par
作为 Expression
的数组类型
但是一个索引可以是 VarExpression
或 ConstExpression
类型
太...或者只是 Expression
因为 VarExpression
和 ConstExpression
类 都是表达式类型所以我需要首先检查它是 VarExpression
还是 ConstExpression
以及它是否不是其中最后 Expression
。
最后对它们进行一些操作,例如添加或其他操作,并将结果存储在新列表中并转换为数组。
请注意,我需要在一个数组中进行比较。
我搜索了但找不到任何东西。也许这个问题重复但我找不到任何东西来得到我的答案
我已经知道了一些方法,但我想知道最好的、最清晰的、高效的、性能好的方法。
我知道的方式
for (int i = 0; i < expression.Par.Length - 1; i++)
{
for (int j = i + 1; j < expression.Par.Length; j++)
{
if (expression.Par[i] is VarExpression && expression.Par[j] is VarExpression)
{
//add and store in list
}
else if (expression.Par[i] is ConstExpression && expression.Par[j] is ConstExpression)
{
//add and store in list
}
else //finaly both or one is only Expression
{
//add and store in list
}
}
}
// convert list to new array
使用 lambda 表达式
var vars = expression.Par.Select(x => x.GetType() == typeof(VarExpression)).ToList() ;
var cons = expression.Par.Select(x => x.GetType() == typeof(ConstExpression)).ToList() ;
然后你可以随心所欲地使用你的表情
使用offtype方法获取只包含所需类型的子集非常简单。
var vars = expression.Par.OfType<VarExpression>()
或者如果您想在 foreach 中处理它们:
foreach (VarExpression variable in expression.Par.OfType<VarExpression>())
{
//processs
}
如何在一个数组中找到类型相等性。或列出 我正在使用这些 类:
public class Expression
{
public Expression[] Par { get; }
public string Opr { get; }
public Expression(string opr,params Expression[] par)
{
Opr = opr;
Par = par;
}
protected Expression()
{
}
}
public class VarExpression : Expression
{
public char Var { get; set; }
}
public class ConstExpression : Expression
{
public double Val { get; set; }
}
我有 Par
作为 Expression
但是一个索引可以是 VarExpression
或 ConstExpression
类型
太...或者只是 Expression
因为 VarExpression
和 ConstExpression
类 都是表达式类型所以我需要首先检查它是 VarExpression
还是 ConstExpression
以及它是否不是其中最后 Expression
。
最后对它们进行一些操作,例如添加或其他操作,并将结果存储在新列表中并转换为数组。
请注意,我需要在一个数组中进行比较。
我搜索了但找不到任何东西。也许这个问题重复但我找不到任何东西来得到我的答案
我已经知道了一些方法,但我想知道最好的、最清晰的、高效的、性能好的方法。
我知道的方式
for (int i = 0; i < expression.Par.Length - 1; i++)
{
for (int j = i + 1; j < expression.Par.Length; j++)
{
if (expression.Par[i] is VarExpression && expression.Par[j] is VarExpression)
{
//add and store in list
}
else if (expression.Par[i] is ConstExpression && expression.Par[j] is ConstExpression)
{
//add and store in list
}
else //finaly both or one is only Expression
{
//add and store in list
}
}
}
// convert list to new array
使用 lambda 表达式
var vars = expression.Par.Select(x => x.GetType() == typeof(VarExpression)).ToList() ;
var cons = expression.Par.Select(x => x.GetType() == typeof(ConstExpression)).ToList() ;
然后你可以随心所欲地使用你的表情
使用offtype方法获取只包含所需类型的子集非常简单。
var vars = expression.Par.OfType<VarExpression>()
或者如果您想在 foreach 中处理它们:
foreach (VarExpression variable in expression.Par.OfType<VarExpression>())
{
//processs
}