在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?
如果可能if的catch话,我不想诉诸于使用声明.
有没有关于使用结构作为WCF服务的返回类型的官方建议?
我目前正在与一项我没有写过的服务进行互动,并发现自己受到启发,要求查看我的烦恼是否合理.
我过去总是使用类 - 可能部分是因为这是样本总是显示的,但正如我现在想的那样,出于其他"直观"的原因:
我通过定义一个单独的项目来开始合同样式,该项目的接口表示服务来回传递的类型.
我使用LINQ很多,因此对于可空性的测试是隐含的引用类型,而对于结构和其他值类型,我总是需要标记为可空.
虽然我承认它比我脑子里的项目符号列表更直观,但有些东西会马上来找我.我想问这个问题,因为我正在处理一个返回结构的服务,并且在处理返回值时必须写:
var foo = Bar.Value.MyField;
Run Code Online (Sandbox Code Playgroud)
代替
var foo = Bar.Value;
Run Code Online (Sandbox Code Playgroud) 如果我有一个类型参数约束new():
void Foo<T>() where T : new()
{
var t = new T();
}
Run Code Online (Sandbox Code Playgroud)
在new T()内部使用该Activator.CreateInstance方法(即反射)是真的吗?
我正在考虑通过将它们包装在自定义中来使原始.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) 我在vs2008中编译一个c ++静态库,在解决方案中我也有一个使用lib的启动项目,并且工作正常.
但是当在另一个解决方案中使用lib时,我得到运行时检查失败."ESP的值没有在功能调用中正确保存"通过代码我注意到函数foo()在崩溃之前跳转到bar().有问题的函数只是常规函数而没有函数指针.
任何人都知道可能会发生什么,以及为什么它在使用同一解决方案中的lib时有效?
编辑:函数(方法)是类的一部分,如果有帮助的话.
我正在阅读Tomas Petricek和Jon Skeet撰写的真实函数式编程书,我很难消化关于计算表达式1)(又名monads)的部分.
通过本书,我了解到 - 与我之前的经验相反 - LINQ查询表达式不仅限于此IEnumerable<T>,而且可以在其他自定义类型上工作.这对我来说似乎很有趣,我想知道是否存在查询表达式语法(from x in ... select ...)非常适合的情况.
显然,这种自定义类型称为计算类型,它们被描绘为与Haskell中的monad基本相同.我从来没有能够理解monad究竟是什么,但根据这本书,它们是通过两个叫做bind和return的操作来定义的.
在函数式编程中,这两个操作的类型签名将是(我认为):
// 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.
使用这些知识,我现在可以编写一个不是 的自定义计算类型IEnumerable: …
我从Google的数据API获取JSON提要,许多属性名称以$字符(美元符号)开头.
我的问题是我不能创建一个带有以美元符号开头的变量名的C#类,这是语言不允许的.我正在使用Newtonsoft的JSON.NET将JSON转换为C#对象.我怎样才能解决这个问题?
我怎么能等待n个脉冲?
… // do something
waiter.WaitForNotifications();
Run Code Online (Sandbox Code Playgroud)
我希望上面的线程等到被通知n次(由n个不同的线程或n次由同一个线程).
我相信有一种计数器可以做到这一点,但我找不到它.
在C#中,如果我们定义一个enum包含对应于负值的成员,然后我们迭代它enum的值,那么负值不是第一个,而是最后一个.为什么会这样?在其他语言(C,C++,Ada等)中,迭代a enum将为您提供定义它的顺序.
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# ×9
struct ×2
activator ×1
c++ ×1
enums ×1
generics ×1
ienumerable ×1
json ×1
json.net ×1
linq ×1
monads ×1
reflection ×1
static ×1
type-safety ×1
value-type ×1
vb.net ×1
vb.net-to-c# ×1
wcf ×1
winapi ×1