我们为所有逻辑运算符,Shift运算符,Additive运算符和所有Multiplicative运算符都有等效的赋值运算符.
为什么逻辑运算符被遗漏了?难道有一个很好的技术理由吗?
c# language-design operators assignment-operator compound-assignment
为什么AutoResetEventSlim
BCL 没有班级?
可以使用模拟ManualResetEventSlim
吗?
我目前正在使用亚马逊订单API来获取订单详情.然后我在我们的系统上创建订单,然后从这里发货.
我想在货物发货后再更新亚马逊订单我们的货件编号等,但找不到任何API来执行此操作.
是否有API用于更新亚马逊的订单和货件信息,如果是,在哪里/它是什么?
我搜遍了整个地方,但没有发现任何东西,所以任何帮助都会非常感激.
我想要一个通用的解决方案,但作为一个例子,假设我有一个IEnumerable<string>
,其中一些可以解析为整数,有些不能.
var strings = new string[] { "1", "2", "notint", "3" };
Run Code Online (Sandbox Code Playgroud)
显然,如果我这样做,Select(s => int.Parse(s, temp))
它会在枚举时抛出异常.
在这种情况下,我可以先做.All(s => int.TryParse(s, out temp))
,但我想要一个通用的解决方案,我不必枚举IEnumerable
两次.
理想情况下,我希望能够执行以下操作,它调用我的魔术异常跳过方法:
// e.g. parsing strings
var strings = new string[] { "1", "2", "notint", "3" };
var numbers = strings.Select(s => int.Parse(s)).SkipExceptions();
// e.g. encountering null object
var objects = new object[] { new object(), new object(), null, new object() }
var objecttostrings = objects.Select(o => o.ToString()).SkipExceptions();
// e.g. …
Run Code Online (Sandbox Code Playgroud) 在C#中,我们必须命名接口方法的参数.
我明白,即使我们没有这样做,这样做也会有助于读者理解其含义,但在某些情况下并不是真的需要:
interface IRenderable
{
void Render(GameTime);
}
Run Code Online (Sandbox Code Playgroud)
我会说上面的内容与下面一样可读且有意义:
interface IRenderable
{
void Render(GameTime gameTime);
}
Run Code Online (Sandbox Code Playgroud)
是否有某些技术原因需要界面上方法参数的名称?
值得注意的是,接口方法的实现可以使用与接口方法中的名称不同的名称.
这个模式有名字吗?
假设您要创建一个采用可变数量参数的方法,每个参数必须是一组固定类型(以任何顺序或组合),以及您无法控制的某些类型.一种常见的方法是让您的方法接受Object类型的参数,并在运行时验证类型:
void MyMethod (params object[] args)
{
foreach (object arg in args)
{
if (arg is SomeType)
DoSomethingWith((SomeType) arg);
else if (arg is SomeOtherType)
DoSomethingElseWith((SomeOtherType) arg);
// ... etc.
else throw new Exception("bogus arg");
}
}
Run Code Online (Sandbox Code Playgroud)
但是,让我们说,像我一样,你沉迷于编译时类型安全性,并希望能够在编译时验证方法的参数类型.这是我想出的一种方法:
void MyMethod (params MyArg[] args)
{
// ... etc.
}
struct MyArg
{
public readonly object TheRealArg;
private MyArg (object obj) { this.TheRealArg = obj; }
// For each type (represented below by "GoodType") that you want your
// method to accept, …
Run Code Online (Sandbox Code Playgroud) 我有2个泛型类,一个BaseComponent
Class和一个BaseManager
类.
它们既抽象又有意成为具体的.
public abstract class BaseManager<T> where T : BaseComponent<?>
public abstract class BaseComponent<T> where T : BaseManager<?>
Run Code Online (Sandbox Code Playgroud)
BaseManager
有一个BaseComponents列表,这就是为什么我想让它通用,所以a PhysicsManager : BaseManager<PhysicsComponent>
将有一个列表PhysicsComponents
.
我想(或者更确切地说,我认为我需要)BaseComponent
是通用的,因为我只希望派生的类BaseComponent
被"附加"到他们适当的经理.理想情况下,我不想为每个派生组件编写构造函数,因此我可以将它添加到传递的具体管理器类中.理想情况下,我想要一个采用抽象BaseManager
类的构造函数.
我怎样才能管理这种循环依赖?
在定义泛型类型参数的约束时,我们必须放在class()
前面和后面new()
,例如.
为什么这样,为什么我不能以任何顺序放置我的约束?
除了class
/ struct
首先,new()
最后还有其他任何限制?
例:
protected T Clone<T>() where T : class, ICopyable<T>, new()
Run Code Online (Sandbox Code Playgroud) 我正在进行单元测试的第一步,并编写了(以及其他)这两种方法:
[TestCase]
public void InsertionSortedSet_AddValues_NoException()
{
var test = new InsertionSortedSet<int>();
test.Add(5);
test.Add(2);
test.Add(7);
test.Add(4);
test.Add(9);
}
[TestCase]
public void InsertionSortedSet_AddValues_CorrectCount()
{
var test = new InsertionSortedSet<int>();
test.Add(5);
test.Add(2);
test.Add(7);
test.Add(4);
test.Add(9);
Assert.IsTrue(test.Count == 5);
}
Run Code Online (Sandbox Code Playgroud)
NoException
真的需要这种方法吗?如果要抛出异常,它也将被抛出CorrectCount
.
我倾向于将它保留为2个测试用例(可能将重复的代码重构为另一种方法),因为测试应该只测试单个事物,但也许我的解释是错误的.
使用.net 4.0,添加了几个与线程相关的新类:ManualResetEventSlim,SemaphoreSlim和ReaderWriterLockSlim.
Slim版本和旧版本之间有什么区别,什么时候应该使用其中一个?
c# ×10
generics ×2
.net ×1
.net-4.0 ×1
amazon ×1
c#-4.0 ×1
constraints ×1
ienumerable ×1
interface ×1
linq ×1
nunit ×1
operators ×1
parameters ×1
params ×1
type-safety ×1
unit-testing ×1
word-wrap ×1