小编sta*_*ica的帖子

C#相当于VB.NET的Catch ......当

在VB.NET中,我经常Catch…When:

Try
    …
Catch e As ArgumentNullException When e.ParamName.ToUpper() = "SAMPLES"
    …
End Try
Run Code Online (Sandbox Code Playgroud)

是否有C#相当于Catch…When

如果可能ifcatch话,我不想诉诸于使用声明.

c# vb.net exception-handling vb.net-to-c#

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

将Structs与WCF服务一起使用

有没有关于使用结构作为WCF服务的返回类型的官方建议?

我目前正在与一项我没有写过的服务进行互动,并发现自己受到启发,要求查看我的烦恼是否合理.

我过去总是使用类 - 可能部分是因为这是样本总是显示的,但正如我现在想的那样,出于其他"直观"的原因:

  • 我通过定义一个单独的项目来开始合同样式,该项目的接口表示服务来回传递的类型.

  • 我使用LINQ很多,因此对于可空性的测试是隐含的引用类型,而对于结构和其他值类型,我总是需要标记为可空.

虽然我承认它比我脑子里的项目符号列表更直观,但有些东西会马上来找我.我想问这个问题,因为我正在处理一个返回结构的服务,并且在处理返回值时必须写:

var foo = Bar.Value.MyField;
Run Code Online (Sandbox Code Playgroud)

代替

var foo = Bar.Value;
Run Code Online (Sandbox Code Playgroud)

c# wcf struct value-type

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

给定"where T:new()","new T()"在内部使用Activator.CreateInstance吗?

如果我有一个类型参数约束new():

void Foo<T>() where T : new()
{
    var t = new T();
}
Run Code Online (Sandbox Code Playgroud)

new T()内部使用该Activator.CreateInstance方法(即反射)是真的吗?

c# generics reflection activator type-constraints

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

通过自定义结构类型校对原语.NET值类型:值得努力吗?

我正在考虑通过将它们包装在自定义中来使原始.NET值类型更加类型安全并且更"自我记录" struct.但是,我想知道它是否真的值得在现实世界的软件中付出努力.

(这种"努力"可以在下面看到:必须一次又一次地应用相同的代码模式.我们声明structs,因此不能使用继承来删除代码重复;并且由于必须声明重载的运算符static,因此必须定义它们对于每种类型单独.)

拿这个(公平地说是微不足道的)例子:

struct Area
{
    public static implicit operator Area(double x) { return new Area(x); }
    public static implicit operator double(Area area) { return area.x; }

    private Area(double x) { this.x = x; }
    private readonly double x;
}

struct Length
{
    public static implicit operator Length(double x) { return new Length(x); }
    public static implicit operator double(Length length) { return length.x; }

    private Length(double x) { this.x = x; }
    private readonly …
Run Code Online (Sandbox Code Playgroud)

c# struct primitive-types type-safety implicit-conversion

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

函数调用跳转到错误的函数

我在vs2008中编译一个c ++静态库,在解决方案中我也有一个使用lib的启动项目,并且工作正常.

但是当在另一个解决方案中使用lib时,我得到运行时检查失败."ESP的值没有在功能调用中正确保存"通过代码我注意到函数foo()在崩溃之前跳转到bar().有问题的函数只是常规函数而没有函数指针.

任何人都知道可能会发生什么,以及为什么它在使用同一解决方案中的lib时有效?

编辑:函数(方法)是类的一部分,如果有帮助的话.

c++ static visual-studio-2008 stack-pointer

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

对IEnumerable <T>以外的类型(monads?)进行操作的LINQ查询表达式 - 可能的用途?

我正在阅读Tomas Petricek和Jon Skeet撰写的真实函数式编程书,我很难消化关于计算表达式1)(又名monads)的部分.

通过本书,我了解到 - 与我之前的经验相反 - LINQ查询表达式不仅限于此IEnumerable<T>,而且可以在其他自定义类型上工作.这对我来说似乎很有趣,我想知道是否存在查询表达式语法(from x in ... select ...)非常适合的情况.


一些背景信息:

显然,这种自定义类型称为计算类型,它们被描绘为与Haskell中的monad基本相同.我从来没有能够理解monad究竟是什么,但根据这本书,它们是通过两个叫做bindreturn的操作来定义的.

在函数式编程中,这两个操作的类型签名将是(我认为):

//    Bind      :    M<A'> -> (A' -> B') -> M<B'>
//
//    Return    :    A' -> M<A'>
Run Code Online (Sandbox Code Playgroud)

Mmonadic类型的名称在哪里.

在C#中,这对应于:

Func< M<A>, Func<A,B>, M<B> >   Bind;

Func< A, M<A> >                 Return;
Run Code Online (Sandbox Code Playgroud)

事实证明,LINQ Enumerable.Select(投影运算符)与绑定操作具有完全相同的签名M := IEnumerable.

我的自定义LINQ计算类型:

使用这些知识,我现在可以编写一个不是 的自定义计算类型IEnumerable: …

c# linq monads ienumerable computation-expression

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

C#类如何处理JSON中的美元符号?

我从Google的数据API获取JSON提要,许多属性名称以$字符(美元符号)开头.

我的问题是我不能创建一个带有以美元符号开头的变量名的C#类,这是语言不允许的.我正在使用Newtonsoft的JSON.NET将JSON转换为C#对象.我怎样才能解决这个问题?

c# json json.net google-data-api

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

如何更改其他程序窗口的大小?

我怎么能改变另一个程序 - 比如说我的C#程序中的Skype的窗口大小?

c# winapi

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

让一个线程等待n个脉冲

我怎么能等待n个脉冲?

… // do something
waiter.WaitForNotifications();
Run Code Online (Sandbox Code Playgroud)

我希望上面的线程等到被通知n次(由n个不同的线程或n次由同一个线程).

我相信有一种计数器可以做到这一点,但我找不到它.

c# multithreading

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

为什么负面枚举成员最后被foreach枚举?

在C#中,如果我们定义一个enum包含对应于负值的成员,然后我们迭代它enum的值,那么负值不是第一个,而是最后一个.为什么会这样?在其他语言(C,C++,Ada等)中,迭代a enum将为您提供定义它的顺序.

MSDN 就是这种行为的一个很好的例子:

using System;

enum SignMagnitude { Negative = -1, Zero = 0, Positive = 1 };

public class Example
{
    public static void Main()
    {
        foreach (var value in Enum.GetValues(typeof(SignMagnitude)))
        {
            Console.WriteLine("{0,3}     0x{0:X8}     {1}",
                              (int) value, ((SignMagnitude) value));
        }   
    }
}

// The example displays the following output: 
//         0     0x00000000     Zero 
//         1     0x00000001     Positive 
//        -1     0xFFFFFFFF     Negative
Run Code Online (Sandbox Code Playgroud)

c# enums

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