小编def*_*mer的帖子

VB.Net是否具有等同于#pragma warning disable/restore的功能?

我找到了一种方法来禁用整个VB.NET项目的警告,但这是非常不受欢迎的.我想最多禁用一个方法范围的某个警告.逐行禁用和恢复会更好.例如,C#有#pragma warning disable(和restore).VB.NET有这样的东西吗?

vb.net compiler-warnings

15
推荐指数
1
解决办法
3609
查看次数

找出表达式是否包含"孤独"的ParameterExpression

有没有一种简单的方法可以找出一个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而没有任何进一步的评估

我正在寻找以下问题的答案:

给定一个表达式,如果我知道输入参数的所有方法返回值和属性值而不是参数值本身,我可以计算表达式吗?

c# expression

7
推荐指数
1
解决办法
303
查看次数

你能用隐式转换满足泛型约束吗?

鉴于以下类型:

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

c# generics implicit-conversion

6
推荐指数
2
解决办法
2126
查看次数

强制SCons在64位Windows上使用32位MSVC编译器

我正在尝试使用clVisual 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)

scons cl

6
推荐指数
2
解决办法
3693
查看次数

在此LINQ查询中多次使用"选择"的目的是什么?

我遇到了一些像这样的代码:

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#,它会产生编译错误.

有没有理由使用多个选择?这会导致查询行为不同吗?

linq vb.net

6
推荐指数
1
解决办法
393
查看次数

懒惰的财产需要"这个"

这是我拥有的一个属性的示例,尽可能简单地编码

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)

.net c# lazy-evaluation

5
推荐指数
2
解决办法
164
查看次数

如何解决 CheckLib 返回 false 的问题?

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)

scons

5
推荐指数
1
解决办法
1618
查看次数

我可以部分派出秀吗?

我已经编写了这段代码来打印一棵树:

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)

haskell

5
推荐指数
1
解决办法
192
查看次数

为什么使这个getter可以为空导致编译错误?

此代码有效:

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)

c# c#-6.0

5
推荐指数
2
解决办法
93
查看次数

计算scala中序列的后续元素的差异

我想在scala中做到这一点.有优雅的方式吗?

具体来说,我只想要序列中相邻元素的区别.例如

input = 1,2,6,9
output = 1,4,3
Run Code Online (Sandbox Code Playgroud)

scala

4
推荐指数
2
解决办法
1465
查看次数

DirectoryInfo.Exists在MSTest期间始终返回false

我在应用程序处理创建目录的边界上有一些逻辑.我想测试它实际上是按预期创建目录,但即使目录实际存在,DirectoryInfo.Exists属性也始终返回false.

另请参阅此问题 - 您需要设置断点以查看该目录是否已实际创建,因为MSTest将在测试结束时将其删除.

是否有一些设置告诉MSTest在测试期间允许"正常"的文件系统IO?

.net directory file-io mstest directoryinfo

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

为什么Visual Studio建议"TODO:将大字段设置为空".

在Visual Studio(至少2010年)中编写VB.NET时,如果创建实现IDisposableIDE 的类将为您生成此框架:

' 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会推荐它呢?

*假设您没有对正在处理的对象进行实时引用,这很奇怪.

vb.net visual-studio-2010 visual-studio

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

为什么WPF似乎在实现INotifyPropertyChanged时绕过TypeDescriptionProviderAttribute?

我正在尝试使用它[TypeDescriptionProviderAttribute]来为我的类提供自定义类型描述符.这是有效的,但是当我实现INotifyPropertyChangedWPF时,似乎忽略了自定义类型描述符并直接进入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".

  • 使用ICustomTypeDescriptorINotifyPropertyChanged

    我按预期看到了"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

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