小编Jer*_*vel的帖子

从TypeInfo对象获取类型的完全限定名称

是否有可能获得TypeInfo对象中包含的类型的完全限定名称?

在调试器中,很多这些值很好地显示为,System.Int32但是当它打印出来时,其中没有一个包含这个完全限定的名称.我需要这个作为参数Type.GetType().

var typeInfo = semanticModel.GetTypeInfo(argument);
var w = typeInfo.ToString(); // Microsoft.CodeAnalysis.TypeInfo
var y = typeInfo.Type.ToString(); // int
var z = typeInfo.Type.ToDisplayString(); // int 
var a = typeInfo.Type.OriginalDefinition.ToDisplayString(); // int
var b = typeInfo.Type.OriginalDefinition.ToString(); // int
var c = typeInfo.Type.Name; // Int32
var d = typeInfo.Type.MetadataName; // Int32
var e = typeInfo.Type.ToDisplayParts(); // {int}
var f = typeInfo.Type.ContainingNamespace; // System
Run Code Online (Sandbox Code Playgroud)

请注意,这应该适用于每种类型,因此我不能只是将名称空间与名称连接起来.

或者:是否有其他(更适合?)的方式来获得确切的类型?

对于上下文:我想检查类的类型参数是否包含一些特定的方法.因此,我的方法是从每个对象TypeArgumentListSyntax获取参数并从中获取参数.TypeInfoTypeSyntax

c# roslyn

14
推荐指数
2
解决办法
2912
查看次数

为什么List.Add(E)返回布尔值而List.Add(int,E)返回void?

看看javadoc我看到一个ArrayList有一个重载的add方法:

public boolean add(E e)

将指定的元素追加到此列表的末尾.

public void add(int index,E element)

将指定元素插入此列表中的指定位置.将当前位于该位置的元素(如果有)和任何后续元素向右移动(向其索引添加一个元素).

我注意到第一个返回了一段boolean时间,第二个是a void.事实证明,第一个addHAS返回一个boolean因为:

返回:true(由Collection.add(E)指定)

所以我去了Collection.add(E):

布尔加法(E e)

确保此集合包含指定的元素(可选操作).如果此集合因调用而更改,则返回true.(如果此集合不允许重复并且已包含指定的元素,则返回false.)

所以我的问题是,为什么add指定返回boolean而不是void?当我想要的add东西,我希望只做一个操作.

据我所知,还有其他数据结构,与ArrayList相反,不允许重复(例如集合).但即使这样,问题也不可能按照以下方式解决:

public void add(E e){
    if(e is not in set){
        add e;
    }
}
Run Code Online (Sandbox Code Playgroud)

这样,如果e集合中的IS没有采取行动.为什么返回a boolean而不是void方法更好?

java collections arraylist

14
推荐指数
1
解决办法
2万
查看次数

在Roslyn中获取完全限定的元数据名称

我需要获取特定符号的完整CLR名称.这意味着,对于泛型类型,我需要的`1,`2等附加类型.现在,ISymbol已经有了一个MetadataName确实如此的财产.但是它排除了周围的类型和名称空间,只给出了手头符号的名称.

获得完全限定名称的通常选项,即通过ToDisplayString这里不太合适,因为它不会使用MetadataName它的各个部分.

有这样的内置吗?或者我是否必须在两者之间连接ContainingSymbols 链.?(这个假设是否存在分解?)

编辑:只是注意到你需要+在个别名称之间,如果它是包含在另一种类型中的类型,但除此之外,使用.应该工作,我想.

c# roslyn

14
推荐指数
1
解决办法
2741
查看次数

"无法执行dex:超出GC开销限制"

我正在设计一个带有eclipse的android应用程序.当我尝试运行时,我看到这个窗口:

在此输入图像描述

信息是

"无法执行dex:GC开销限制超出GC开销限制"

eclipse android

13
推荐指数
1
解决办法
2万
查看次数

我在哪里可以找到Visual Studio Express可执行文件?

我在Windows 8.1 PC上安装了visual studio 2013 express版.然后我安装了VS 2013专业版.现在我想运行快速版来验证express和pro之间可用的某些功能,但是我找不到如何启动快速版本.每当我通过Windows 8.1搜索框搜索它时,我只是获得专业版.

任何人都可以指向我安装快速版本可执行文件的位置,以便我可以启动它吗?VS安装在C:\Program Files (x86)\Microsoft Visual Studio 12.0,我假设它在这里我应该安装快递和专业版本.

visual-studio-2013 windows-8.1

13
推荐指数
1
解决办法
3万
查看次数

我如何表达两个值彼此不相等?

是否有类似于equals()表达"不等于"的方法?

我想要完成的一个例子如下:

if (secondaryPassword.equals(initialPassword)) 
{
    JOptionPane.showMessageDialog(null, "You've successfully completed the program.");
} else {
    secondaryPassword = JOptionPane.showInputDialog(null, "Your passwords do not match. Please enter you password again."); 
}
Run Code Online (Sandbox Code Playgroud)

我试图找到一些不需要我使用的东西if ( a != c).

java if-statement equals boolean-expression

12
推荐指数
3
解决办法
14万
查看次数

将接口添加到分部类

我有一个由第三方工具生成的类:

public partial class CloudDataContext : DbContext 
{
    // ...SNIPPED... 
    public DbSet<User> Users { get; set; } 

}
Run Code Online (Sandbox Code Playgroud)

我创建了一个分部类,然后分配一个接口,以便我可以在以后注入这个类:

public partial class CloudDataContext : IDataContext
{

}   
Run Code Online (Sandbox Code Playgroud)

IDataContext具有单一的财产Users.

这不会编译,编译器抱怨接口没有实现.

如果我将接口移动到生成的类,它可以正常工作.因为它是生成的代码,所以我不能这样做.

如何将接口应用于部分类以公开上面定义的类?

c# interface

12
推荐指数
2
解决办法
8027
查看次数

如何使用Moq提供方法实现?

我有几个方法的接口.我有这个接口的默认实现.出于集成测试的目的,我想创建一个模拟实现,如果调用其中一个方法,则返回我的自定义值,否则返回到默认实现.是否可以使用Moq,或者我应该自己创建一个简单的存根?

IInterface default = new DefaultImplementation();
var mock = new Mock<IInterface>();
mock.Setup(i => i.Method(It.IsAny<>())).Calls(p => p==0 ? return 5 : default.Method(p););

TheMethodITest(mock.Object()); //if it calls the object with 0 then it should get 5, otherwise it should call the default object
Run Code Online (Sandbox Code Playgroud)

c# integration-testing nunit moq

12
推荐指数
2
解决办法
1万
查看次数

如何通过添加和删除从旧根检索到的节点来创建新根?

我正在创建一个代码修复程序来改变这个:

if(obj is MyClass)
{
    var castedObj = obj as MyClass;
}
Run Code Online (Sandbox Code Playgroud)

进入这个:

var castedObj = obj as MyClass;
if(castedObj != null)
{
}
Run Code Online (Sandbox Code Playgroud)

这意味着我必须做三件事:

  • 更改if语句中的条件.
  • 将演员移到if声明正上方.
  • 删除正文中的语句.

到目前为止,我所有的尝试都让我陷入困境,最多可以使这两件事情发挥作用.

我相信会出现此问题,因为您在同一级别上基本上有2个语法节点.因此,对其中一个进行更改会使另一个的位置无效.或类似的东西.简而言之:我要么设法在if语句之外复制变量赋值,要么我设法更改条件+删除变量赋值.绝不是全部3.

我该如何解决这个问题?

为了更好地衡量,这是我的代码,它更改条件并删除赋值:

var newIfStatement = ifStatement.RemoveNode(
                                   variableDeclaration,
                                   SyntaxRemoveOptions.KeepExteriorTrivia);
newIfStatement = newIfStatement.ReplaceNode(newIfStatement.Condition, newCondition);

var ifParent = ifStatement.Parent;
var newParent = ifParent.ReplaceNode(ifStatement, newIfStatement);
newParent = newParent.InsertNodesBefore(
                           newIfStatement, 
                           new[] { variableDeclaration })
                           .WithAdditionalAnnotations(Formatter.Annotation);

var newRoot = root.ReplaceNode(ifParent, newParent);
Run Code Online (Sandbox Code Playgroud)

c# roslyn

12
推荐指数
1
解决办法
1178
查看次数

为什么将三元语句中的空值赋给布尔变量会抛出NPE?

我有一部分代码像这样:

public static void main(String[] args) throws Exception {
    String trueValue = Boolean.TRUE.toString();
    String fieldValue = null;
    Boolean defaultValue = null;

    Boolean value = (fieldValue != null ? trueValue.equalsIgnoreCase(fieldValue) : defaultValue);

    System.out.println(value);
}
Run Code Online (Sandbox Code Playgroud)

defaultValue不等于null代码工作正常,但如果defaultValuenull在JVM抛出一个NullPointerException.此代码使用jdk 1.6.45编译.

为什么我得到这个例外?

java ternary-operator nullpointerexception

11
推荐指数
3
解决办法
1592
查看次数