我找到了一种方法来禁用整个VB.NET项目的警告,但这是非常不受欢迎的.我想最多禁用一个方法范围的某个警告.逐行禁用和恢复会更好.例如,C#有#pragma warning disable
(和restore
).VB.NET有这样的东西吗?
有没有一种简单的方法可以找出一个Expression是否包含一个没有进一步包含的ParameterExpression,例如一个MemberExpression.
例:
x => x.Method() ? x : null
<= 1出现x而无需进一步评估
x => x.Method() ? x.Property : null
<= 0出现x而没有任何进一步的评估
简单地说,我的用例是我知道Method(没有参数)和属性值,并想知道这是否足以评估表达式而不从存储中获取整个"对象".
编辑:我的例子可能是简化.需要处理更多表达式类型(例如,UnaryExpression).
x => ((Cast) x).Property
<= 0出现x而没有任何进一步的评估
我正在寻找以下问题的答案:
给定一个表达式,如果我知道输入参数的所有方法返回值和属性值而不是参数值本身,我可以计算表达式吗?
鉴于以下类型:
class A { }
class B
{
public static implicit operator A(B me)
{
return new A();
}
}
class Test<T> where T : A { }
Run Code Online (Sandbox Code Playgroud)
我试过了
var b = new Test<B>();
Run Code Online (Sandbox Code Playgroud)
并期望它失败,它做到了.但错误信息是
类型'B'不能用作泛型类型或方法'Test'中的类型参数'T'.没有从'B'到'A'的隐式引用转换.
但是,是从B到A的隐式引用转换是这只是一个奇怪的消息?有没有隐式引用转换为亚当·罗宾逊的答案所示.消息是正确的.
请注意,MSDN说:
其中T :(基类名) - 类型参数必须是或从指定的基类派生.
这解释了为什么它不被允许,因为B
它不是源自A
我正在尝试使用cl
Visual Studio 2010来构建32位版本的Mixxx.Mixxx使用SCons构建.我的计算机是Windows 7 64位,安装了太多版本的Visual Studio.
下面这些说明,我已经尝试了组合的各种和变化setenv
以及vsvars
但是不管我做什么,我结束了在这种情况下,在命令行:
> cl
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
usage: cl [ option... ] filename... [ /link linkoption... ]
Run Code Online (Sandbox Code Playgroud)
好的,所以cl
指向"版本16,x86" - 太棒了.
> scons toolchain=msvs force32=1 winlib=%cd%\winlib\x86 sqlitedll=0 staticlibs=1 asmlib=0
[... bunch of output truncated, until we start using the compiler ...]
cl /Fores\qrc_mixxx.obj /c res\qrc_mixxx.cc /TP /Zc:wchar_t- /GL /MP /fp:fast …
Run Code Online (Sandbox Code Playgroud) 我遇到了一些像这样的代码:
Dim results = From item In New List(Of Integer) From {1, 2, 3}
Select item
Select item
Run Code Online (Sandbox Code Playgroud)
我很惊讶Select item
两次是合法的.它似乎与只有一条Select
线的行为完全相同.我尝试转换为C#,它会产生编译错误.
有没有理由使用多个选择?这会导致查询行为不同吗?
这是我拥有的一个属性的示例,尽可能简单地编码
private IEnumerable<int> _blocks;
private bool _blocksEvaluated;
public IEnumerable<int> Blocks
{
get
{
if (!_blocksEvaluated)
{
_blocksEvaluated = true;
_blocks = this.CalculateBlocks(0).FirstOrDefault();
}
return _blocks;
}
}
Run Code Online (Sandbox Code Playgroud)
这很冗长; 如果可能的话,我想让它更简洁.以下是可以接受的......
private Lazy<IEnumerable<int>> _blocks =
new Lazy<IEnumerable<int>>(() => this.CalculateBlocks(0).FirstOrDefault());
Run Code Online (Sandbox Code Playgroud)
...但它没有编译.
关键字"this"在静态属性,静态方法或静态字段初始值设定项中无效
所以我想出了以下内容
struct MyLazy<TResult>
{
private bool evaluated;
private TResult result;
public TResult Evaluate(Func<TResult> func)
{
if (!evaluated)
{
evaluated = true;
result = func();
}
return result;
}
}
private MyLazy<IEnumerable<int>> _blocks;
public IEnumerable<int> Blocks
{
get { return _blocks.Evaluate(() => …
Run Code Online (Sandbox Code Playgroud) Scons版本是2.3.3。这是构建脚本的相关部分:
if not conf.CheckLib('portaudio'):
raise Exception(
'Did not find libportaudio.a, portaudio.lib, or the PortAudio-v19 development header files.')
Run Code Online (Sandbox Code Playgroud)
CheckLib 始终返回错误值。我该如何调试这个?我跟踪了 Scons 源代码,直到它尝试构建一个小型测试程序,但随后我无法进一步跟踪它。
我尝试了Scons 手册第 27 节中建议的所有故障排除标志,但没有一个产生任何额外的输出。例如,
C:\code\github\mixxx2>scons -Q --debug=findlibs winlib=%WINLIB_PATH% qtdir=%WINL
IB_PATH%\build\qt-everywhere-opensource-src-4.8.6 hss1394=1 mediafoundation=1 op
us=0 build=%BUILD_TYPE% machine=%TARGET_MACHINE% toolchain=msvs virtualize=0 tes
t=1 sqlitedll=0 mssdk_dir=%MSSDK_DIR% force32=1
Run Code Online (Sandbox Code Playgroud)
我不知道这个-Q
选项有什么用。我尝试过省略它,但没有什么区别;我没有得到有关标准输出的更多信息。只是这个:
[...truncated...]
Checking for C library portaudio... no
ERROR:root:Unmet dependency: Did not find libportaudio.a, portaudio.lib, or the
PortAudio-v19 development header files.
Run Code Online (Sandbox Code Playgroud) 我已经编写了这段代码来打印一棵树:
data Node = A | B | C | Tree Node [Node]
deriving (Show, Eq)
printTree' :: Int -> Node -> [String]
printTree' spaceCount (Tree node children) = (printTree' spaceCount node)
++ concat (map (\child -> printTree' (spaceCount+2) child) children)
printTree' spaceCount leaf = [(replicate spaceCount ' ') ++ (show leaf)]
printTree :: Node -> String
printTree node = unlines (printTree' 0 node)
Run Code Online (Sandbox Code Playgroud)
示例输出:
*Main> putStr $ printTree $ Tree A [Tree A [A,B,C], C]
A
A
A
B …
Run Code Online (Sandbox Code Playgroud) 此代码有效:
class Example
{
public Int32 Int32
{
get { return Int32.Parse("3"); }
}
}
Run Code Online (Sandbox Code Playgroud)
此代码无法编译:
class Example
{
public Int32? Int32
{
get { return Int32.Parse("3"); }
}
}
Run Code Online (Sandbox Code Playgroud)
CS1061'int?' 不包含'Parse'的定义,也没有扩展方法'Parse'接受'int?'类型的第一个参数 可以找到(你错过了使用指令或程序集引用吗?)
我的例子可能看起来很愚蠢,但是如果你使用想象一个枚举就更有意义了
public Choice? Choice { get { return Choice.One; } }
Run Code Online (Sandbox Code Playgroud) 我想在scala中做到这一点.有优雅的方式吗?
具体来说,我只想要序列中相邻元素的区别.例如
input = 1,2,6,9
output = 1,4,3
Run Code Online (Sandbox Code Playgroud) 我在应用程序处理创建目录的边界上有一些逻辑.我想测试它实际上是按预期创建目录,但即使目录实际存在,DirectoryInfo.Exists属性也始终返回false.
另请参阅此问题 - 您需要设置断点以查看该目录是否已实际创建,因为MSTest将在测试结束时将其删除.
是否有一些设置告诉MSTest在测试期间允许"正常"的文件系统IO?
在Visual Studio(至少2010年)中编写VB.NET时,如果创建实现IDisposable
IDE 的类将为您生成此框架:
' IDisposable
Protected Overridable Sub Dispose(disposing As Boolean)
If Not Me.disposedValue Then
If disposing Then
' TODO: dispose managed state (managed objects).
End If
' TODO: free unmanaged resources (unmanaged objects) and override Finalize() below.
' TODO: set large fields to null.
End If
Me.disposedValue = True
End Sub
Run Code Online (Sandbox Code Playgroud)
如果我正确理解垃圾收集,将字段设置为null将没有用处.*但是为什么Visual Studio会推荐它呢?
*假设您没有对正在处理的对象进行实时引用,这很奇怪.
我正在尝试使用它[TypeDescriptionProviderAttribute]
来为我的类提供自定义类型描述符.这是有效的,但是当我实现INotifyPropertyChanged
WPF时,似乎忽略了自定义类型描述符并直接进入CLR属性(如果存在).这是一个片段,稍后我将粘贴完整的示例:
//[TypeDescriptionProvider(typeof(MyProvider))]
class MyModel : Object
//, INotifyPropertyChanged
//, ICustomTypeDescriptor
{
public string TheProperty { get { return "CLR - TheProperty"; } }
Run Code Online (Sandbox Code Playgroud)
我将TextBlock绑定到TheProperty.当我...
留下所有评论
我按预期看到了"CLR - TheProperty".
使用 [TypeDescriptionProvider]
我按预期看到了"MyPropertyDescriptor - TheProperty".
使用 ICustomTypeDescriptor
我按预期看到了"MyPropertyDescriptor - TheProperty".
使用ICustomTypeDescriptor
和INotifyPropertyChanged
我按预期看到了"MyPropertyDescriptor - TheProperty".
使用[TypeDescriptionProvider]
和INotifyPropertyChanged
我看到"CLR - TheProperty".为什么是这样?奇怪的是,正常显示没有 CLR属性的自定义属性.我的自定义类型描述符也返回"MyPropertyDescriptor - AnotherProperty",它在所有情况下都有效,因为没有AnotherProperty
定义CLR .
总之,鉴于此XAML
<StackPanel>
<TextBlock Text="{Binding TheProperty}" />
<TextBlock Text="{Binding AnotherProperty}" />
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
AnotherProperty
始终按预期工作,因为模型没有名为"AnotherProperty"的CLR属性.TheProperty
按预期工作, …
data-binding wpf customtypedescriptor inotifypropertychanged icustomtypedescriptor