是否有可能获得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
看看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方法更好?
我需要获取特定符号的完整CLR名称.这意味着,对于泛型类型,我需要的`1,`2等附加类型.现在,ISymbol已经有了一个MetadataName确实如此的财产.但是它排除了周围的类型和名称空间,只给出了手头符号的名称.
获得完全限定名称的通常选项,即通过ToDisplayString这里不太合适,因为它不会使用MetadataName它的各个部分.
有这样的内置吗?或者我是否必须在两者之间连接ContainingSymbols 链.?(这个假设是否存在分解?)
编辑:只是注意到你需要+在个别名称之间,如果它是包含在另一种类型中的类型,但除此之外,使用.应该工作,我想.
我正在设计一个带有eclipse的android应用程序.当我尝试运行时,我看到这个窗口:

信息是
"无法执行dex:GC开销限制超出GC开销限制"
我在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,我假设它在这里我应该安装快递和专业版本.
是否有类似于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).
我有一个由第三方工具生成的类:
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.
这不会编译,编译器抱怨接口没有实现.
如果我将接口移动到生成的类,它可以正常工作.因为它是生成的代码,所以我不能这样做.
如何将接口应用于部分类以公开上面定义的类?
我有几个方法的接口.我有这个接口的默认实现.出于集成测试的目的,我想创建一个模拟实现,如果调用其中一个方法,则返回我的自定义值,否则返回到默认实现.是否可以使用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) 我正在创建一个代码修复程序来改变这个:
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) 我有一部分代码像这样:
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代码工作正常,但如果defaultValue是null在JVM抛出一个NullPointerException.此代码使用jdk 1.6.45编译.
为什么我得到这个例外?
c# ×5
java ×3
roslyn ×3
android ×1
arraylist ×1
collections ×1
eclipse ×1
equals ×1
if-statement ×1
interface ×1
moq ×1
nunit ×1
windows-8.1 ×1