小编Geo*_*ett的帖子

为什么C#中没有|| =或&& =运算符?

我们为所有逻辑运算符,Shift运算符,Additive运算符和所有Multiplicative运算符都有等效的赋值运算符.

为什么逻辑运算符被遗漏了?难道有一个很好的技术理由吗?

c# language-design operators assignment-operator compound-assignment

56
推荐指数
1
解决办法
9594
查看次数

为什么BCL中没有AutoResetEventSlim?

为什么AutoResetEventSlimBCL 没有班级?

可以使用模拟ManualResetEventSlim吗?

.net c# multithreading base-class-library c#-4.0

31
推荐指数
2
解决办法
4529
查看次数

Amazon API标记订单已发货

我目前正在使用亚马逊订单API来获取订单详情.然后我在我们的系统上创建订单,然后从这里发货.

我想在货物发货后再更新亚马逊订单我们的货件编号等,但找不到任何API来执行此操作.

是否有API用于更新亚马逊的订单和货件信息,如果是,在哪里/它是什么?

我搜遍了整个地方,但没有发现任何东西,所以任何帮助都会非常感激.

c# amazon

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

LINQ查询执行投射,跳过或包装异常,其中源抛出IEnumerable.GetNext()

我想要一个通用的解决方案,但作为一个例子,假设我有一个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# linq ienumerable exception-handling word-wrap

21
推荐指数
2
解决办法
2530
查看次数

为什么我们必须命名接口方法参数?

在C#中,我们必须命名接口方法的参数.

我明白,即使我们没有这样做,这样做也会有助于读者理解其含义,但在某些情况下并不是真的需要:

interface IRenderable
{
    void Render(GameTime);
}
Run Code Online (Sandbox Code Playgroud)

我会说上面的内容与下面一样可读且有意义:

interface IRenderable
{
    void Render(GameTime gameTime);
}
Run Code Online (Sandbox Code Playgroud)

是否有某些技术原因需要界面上方法参数的名称?


值得注意的是,接口方法的实现可以使用与接口方法中的名称不同的名称.

c# parameters language-design interface

21
推荐指数
2
解决办法
7152
查看次数

这个模式有名字吗?(C#编译时类型安全与"params"不同类型的args)

这个模式有名字吗?

假设您要创建一个采用可变数量参数的方法,每个参数必须是一组固定类型(以任何顺序或组合),以及您无法控制的某些类型.一种常见的方法是让您的方法接受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)

c# params type-safety

19
推荐指数
1
解决办法
590
查看次数

圆形泛型类型参数

我有2个泛型类,一个BaseComponentClass和一个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类的构造函数.

我怎样才能管理这种循环依赖?

c# generics circular-dependency

19
推荐指数
1
解决办法
2065
查看次数

为什么在泛型参数约束中强制执行某些排序?

在定义泛型类型参数的约束时,我们必须放在class()前面和后面new(),例如.

为什么这样,为什么我不能以任何顺序放置我的约束?

除了class/ struct首先,new()最后还有其他任何限制?


例:

protected T Clone<T>() where T : class, ICopyable<T>, new()
Run Code Online (Sandbox Code Playgroud)

c# generics language-design constraints

19
推荐指数
1
解决办法
951
查看次数

我应该测试那些方法不会抛出异常吗?

我正在进行单元测试的第一步,并编写了(以及其他)这两种方法:

    [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个测试用例(可能将重复的代码重构为另一种方法),因为测试应该只测试单个事物,但也许我的解释是错误的.

c# nunit unit-testing

18
推荐指数
2
解决办法
853
查看次数

ManualResetEvent(Slim),Semaphore(Slim)和ReaderWriterLock(Slim)的使用和实现方式的差异

使用.net 4.0,添加了几个与线程相关的新类:ManualResetEventSlim,SemaphoreSlimReaderWriterLockSlim.

Slim版本和旧版本之间有什么区别,什么时候应该使用其中一个?

c# multithreading .net-4.0

15
推荐指数
4
解决办法
9135
查看次数