小编Cor*_*ker的帖子

ReSharper好奇心:"参数仅用于前置条件检查."

为什么ReSharper会判断我这个代码?

    private Control GetCorrespondingInputControl(SupportedType supportedType, object settingValue)
    {
        this.ValidateCorrespondingValueType(supportedType, settingValue);

        switch(supportedType)
        {
            case SupportedType.String:
                return new TextBox { Text = (string)settingValue };
            case SupportedType.DateTime:
                return new MonthPicker { Value = (DateTime)settingValue, ShowUpDown = true };
            default:
                throw new ArgumentOutOfRangeException(string.Format("The supported type value, {0} has no corresponding user control defined.", supportedType));
        }
    }

    private void ValidateCorrespondingValueType(SupportedType supportedType, object settingValue)
    {
        Type type;

        switch(supportedType)
        {
            case SupportedType.String:
                type = typeof(string);
                break;
            case SupportedType.DateTime:
                type = typeof(DateTime);
                break;
            default:
                throw new ArgumentOutOfRangeException(string.Format("The supported …
Run Code Online (Sandbox Code Playgroud)

c# resharper preconditions

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

你什么时候使用List <KeyValuePair <T1,T2 >>而不是Dictionary <T1,T2>?

对于相同类型,KeyValuePair列表和Dictionary之间有什么区别?是否有适当的时间使用其中一个?

c# dictionary

83
推荐指数
6
解决办法
3万
查看次数

如何以编程方式创建包含内容的datatemplate?

我想在运行时在代码中执行以下操作:

<DataTemplate x:Key="lightGreenRectangle">
        <Rectangle Fill="LightGreen"/>
    </DataTemplate>
Run Code Online (Sandbox Code Playgroud)

到目前为止我有:

public DataTemplate GetColouredRectangleInDataTemplate(Color colour)
{
    DataTemplate dataTemplate = new dataTemplate();

    return dataTemplate;
}
Run Code Online (Sandbox Code Playgroud)

救命?我知道这不是设计控件样式的最优雅方式,但我想指定颜色的组件有一个名为"PointTemplate"的属性,类型为DataTemplate.

wpf telerik datatemplate

16
推荐指数
2
解决办法
2万
查看次数

Visual Studio Online预定构建无法找到我的分支

我在Visual Studio Online中创建了一个Build Definition,它指向BitBucket上托管的"External Git"存储库.详细信息在"存储库"选项卡下设置如下: 回购设置

当我手动排队构建时,使用"队列构建..."按钮,一切都按预期工作.我的日志如下:

2015-07-22T07:07:50.0285647Z Syncing repository: NxGN.OpenCast (Git)
2015-07-22T07:07:53.6355527Z Checking out origin/dev to C:\a\6268f160\NxGN.OpenCast
2015-07-22T07:07:53.9928992Z Checked out branch dev for repository NxGN.OpenCast at commit 9a658c94a1045df5656a654c780f5b7d1c2809f4
Run Code Online (Sandbox Code Playgroud)

我的问题是,对于预定的构建,配置如 预定构建 它失败并带有以下日志:

2015-07-22T07:20:24.0976453Z Syncing repository: NxGN.OpenCast (Git)
2015-07-22T07:20:26.6424255Z Checking out +origin/dev to C:\a\6268f160\NxGN.OpenCast
2015-07-22T07:20:26.6724252Z ##[error]No valid git object identified by '+origin/dev' exists in the repository.
Run Code Online (Sandbox Code Playgroud)

我试图指定分支为dev,origin/dev,refs/heads/dev,所有这些地方的+在生产日志中的分支名称的开头.

我究竟做错了什么?

git deployment continuous-integration automation visual-studio

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

拥有(太多)命名空间的后果是什么?

我在一个项目上运行代码分析,我得到一个警告说

CA1020:Microsoft.Design:考虑将{some namespace}中定义的类型与另一个名称空间合并.{some namespace}

为什么我这样做?拥有太多名称空间是否有负面影响?

c# code-analysis namespaces

9
推荐指数
1
解决办法
4474
查看次数

有没有办法跟踪字典中项目的顺序?

我有一个Dictionary<Guid, ElementViewModel>.(ElementViewModel是我们自己的复杂类型.)我使用股票标准将项目添加到字典中items.Add(Guid.NewGuid, new ElementViewModel() { /*setters go here*/ });,

稍后我会删除部分或全部这些项目.

我的ElementViewModel的简单视图是这样的:

class ElementViewModel
{
    Guid Id { get; set; }
    string Name { get; set; }
    int SequenceNo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

值得一提的是,如果发生移动和复制等其他操作,则在添加后,SequenceNos在集合中被压缩.{1,5,6} - > {1,2,3}

我的删除操作的简单视图是:

public void RemoveElementViewModel(IEnumerable<ElementViewModel> elementsToDelete)
{
    foreach (var elementViewModel in elementsToDelete)
        items.Remove(elementViewModel.Id);

    CompactSequenceNumbers();
}
Run Code Online (Sandbox Code Playgroud)

我将用一个例子说明问题:

我在字典中添加了3个项目:

var newGuid = Guid.NewGuid();
items.Add(newGuid, new MineLayoutElementViewModel { Id = newGuid, SequenceNo = 1, Name = "Element 1" });
newGuid = Guid.NewGuid();
items.Add(newGuid, …
Run Code Online (Sandbox Code Playgroud)

.net c# dictionary hashtable

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

Linq"Where"比Linq"Select"更贵吗?

我正在研究一项手术的表现.我正在迭代集合中的一部分项目.我使用Linq查询过滤此集合.它基本上看起来像这样:

var filteredItems = items.Where(x => x.PropertyToFilterOn == filterValue);
foreach (var filteredItem in filteredItems)
{
    // do something to the filtered item
}
Run Code Online (Sandbox Code Playgroud)

如果我用Select而不是Where我实现同样的事情.哪个更好用,有什么区别?

c# linq collections performance select

3
推荐指数
2
解决办法
899
查看次数

为不同的Windows窗体控件使用相同的事件处理程序是否安全?

这是好习惯吗?我有3个DataGridView,我希望有一个工具允许用户通过单击列标题对数据进行排序.我可以为每个DataGridView的ColumnHeaderMouseClick事件创建一个事件处理程序,但我做了一个:

private void dataGridView_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
    {
        SortDataGridView((sender as DataGridView), e.ColumnIndex);
    }
Run Code Online (Sandbox Code Playgroud)

SortDataGridView看起来像这样:

/// <summary>
    /// Sorts a given DataGridView by a column given by its columnIndex.
    /// Default sort (if it isn't currently sorted) is Ascending. If it's 
    /// already sorted Ascending, change it to Descending. If it is Descending,
    /// change it to Ascending.
    /// </summary>
    /// <param name="dataGridViewToSort">The DataGridViewToSort</param>
    /// <param name="columnIndexToSortBy">The index of the column which we want to sort by in the DataGridView.</param>
    private …
Run Code Online (Sandbox Code Playgroud)

c# event-handling winforms

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

是否有Linq操作来确定集合中是否存在具有相同属性值的项目?

C#:我有一组对象.T有2个属性.属性A和属性B.此集合需要遵守的规则是A和B的值组合在集合中必须是唯一的.换句话说,A和B需要用作复合主键.

在Linq有一个操作我可以用来检查这种情况吗?我希望它会像

if (items.Select(x => x.Name).Distinct().Count() != items.Select(x => x.Name).Count())
Run Code Online (Sandbox Code Playgroud)

上面的陈述是我如何检查集合中是否有重复名称的项目,但我不知道如何为多个属性执行此操作.

c# linq anonymous-types composite-key

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

是否有Linq操作从项目列表中检索特定项目,其中项目具有应该是唯一的属性的属性值?

我有一个List<>自定义对象.此自定义类型具有一个属性Name,该属性在列表中应该是唯一的.换句话说,列表中没有2个项目的Name属性应该具有相同的值.

当我验证此列表时,我想检索有问题的项目.是否有Linq操作允许我这样做?

我希望有类似的东西

listOfItems.Where(x => x.Name.Equals(/*anything else in this list with the same value for name */)
Run Code Online (Sandbox Code Playgroud)

基本上,我试图避免针对列表中的每个项目(在嵌套的foreach中)检查整个列表:

private IList<ICustomObject> GetDuplicatedTypeNames(IList<ICustomObjects> customObjectsToFindDuplicatesIn)
    {
        var duplicatedList = new List<ICustomObject>();

        foreach(var customObject in customObjectsToFindDuplicatesIn)
            foreach(var innerCustomObject in customObjectsToFindDuplicatesIn)
                if (customObject == innerCustomObject && customObject .Name.Equals(innerCustomObject.Name))
                    duplicatedList.Add(customObject);

        return duplicatedList;
    }
Run Code Online (Sandbox Code Playgroud)

(编辑)注意:我被限制使用域<>按域规则,并且使用字典<>不是一个选项.

c# linq

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