我正在寻找一种方法来获取方法中的所有对象创建。我提出了以下解决方案来获取所有创作的列表:
var creations = MethodDeclaration.Body.DescendantNodes().OfType<ObjectCreationExpressionSyntax>();
但现在我正在寻找标识符名称(变量名称)。在调试时我发现,这个变量有这个信息 - 但是标识符属性是不可访问的。
creations.First().Parent.Parent.Identifier.ValueText;
如果有人能解决我的问题,我会很高兴。
修改
我正在尝试分析单元测试。 E.g:
[TestMethod]
public void WarningOverReferencedTest()
{
var myVar = new MyObject();
var myVar1 = new MyObject1();
var myVar2 = new MyObject2();
var myVar3 = new MyObject();
var myVar4 = new MyObject3();
Assert.AreEqual(true, myVar.someProperty);
Assert.AreEqual(true, myVar3.someProperty2);
Assert.AreEqual(true, myVar1.someProperty);
Assert.AreEqual(true, myVar2.someProperty);
}
我想计算Assert.AreEqual
检查中使用的引用。因此,上面的示例应返回3,因为myVar
和myVar3
来自同一类型,并且myVar4
检查中未使用Assert.AreEqual
。
答案 0 :(得分:1)
您需要将<?php
$dbconnect = new mysqli('localhost', 'root', '', 'name');
$results = array();
$secondRow = array();
foreach ($switchArray as $key => $value) {
$results = snmpwalk($value, "public", ".1.3.6.1.2.1.17.4.3.1.1");
foreach ($results as $secondResults) {
$secondResults = str_replace(" ", "", $secondResults);
$secondResults = str_replace("Hex-STRING:", "", $secondResults);
$secondResults = str_replace("STRING:", "", $secondResults);
$secondResults = str_replace("INTEGER:", "", $secondResults);
$secondArray[] = $secondResults;
}
}
echo "looping through results of the ip";
echo "<pre>";
print_r($secondArray);
echo "</pre>";
?>
投射到具有creations.First().Parent.Parent
属性的类型 - 在您的情况下最有可能Identifier
- 然后您将能够访问其VariableDeclaratorSyntax
{1}}。这当然很危险,因为您可能会发现祖父母不同的Identifier
。
看一下这个例子:
ObjectCreationSyntax
您将成功获得List<Person> people = new List<Person>() {
new Person("Jim"),
new Person("Frank")
};
Identifier
的{{1}},但不会成功获取其中的元素&#39; (因为它们根本没有变量名)。有许多角落案例需要解决,有很多可能的解决方案。
一个肮脏的解决方法是检查祖父母是否是善良的people
并仅在此时施放。也许如果你分享你想要完成的事情(在宏观计划中),我可以提供更好的建议。
修改强>
如果我理解正确,您需要计算方法中创建的不同类型的数量。 ObjectCreation
个对象具有VariableDeclarator
属性,该属性显示正在创建的对象类型。这正是您所需要的,但是获取类型本身是troublesome,但您可以查看这样的名称:
ObjectCreationExpressionSyntax
您不能只计算Type
- s,因为这些是HashSet<ITypeSymbol> types = new HashSet<ITypeSymbol>();
foreach (ObjectCreationExpressionSyntax node in creations)
{
var typeSymbol = semanticModel.GetTypeInfo(node).Type;
types.Add(typeSymbol);
}
int numberOfTypes = types.Count;
- s,并且不会相同。但他们的符号将是,并使用node.Type
将确保您没有重复。如果您使用SyntaxNode
,则可以从上下文中获取HashSet
对象。