小编Shi*_*mmy的帖子

Null 检查空对象模式

空对象模式的主要目标是确保向客户端提供可用的对象。所以我们想替换以下代码......

void Class::SetPrivateMemberA() {
    m_A = GetObject();
}

void Class::UseA() {
    if (m_A != null) {
        m_A.Method();
    } else {
        // assert or log the error
    }
}
Run Code Online (Sandbox Code Playgroud)

...通过这个实现:

void Class::SetPrivateMemberA() {
    m_A = GetObject();
}

void Class::UseA() {
    m_A.Method();
}
Run Code Online (Sandbox Code Playgroud)

我想到的问题是 GetObject() 仍然返回一个对象、NULL 对象或其他对象。我喜欢不重复检查 null 并相信发送回的对象可用的想法,但为什么我不在第一个实现中这样做呢?

空对象模式的优点只是稍微增加了清理代码的信任吗?对于第二个实现,在调用 A.Method() 之前检查它是否不为 null 不是一个好习惯吗?

c++ null design-patterns object

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

根据网格的ColumnWidth更改矩形填充

基本上我想按照标题说的那样做,如果列宽为.50那么矩形应该是红色,如果它是.75那么它应该是琥珀色,如果是1则那么它应该是绿色.

我以为我可以使用DataTriggers实现这一点但由于某种原因我得到"对象引用未设置为对象的实例"错误,这是我的代码,我在这里遗漏了什么?

FYI width属性将在后端通过timer_tick事件更改.

<Grid x:Name="Grid1" Width="300" Height="30">
    <Grid.ColumnDefinitions>
        <ColumnDefinition x:Name="MyColumn1" Width=".50*"></ColumnDefinition>
        <ColumnDefinition x:Name="MyColumn2" Width=".50*"></ColumnDefinition>
    </Grid.ColumnDefinitions>
    <Grid.Triggers>
        <DataTrigger Binding="{Binding ElementName=MyColumn1,Path=Width}" Value=".50*">
            <Setter TargetName="rect" Property="Fill" Value="Red"></Setter>
        </DataTrigger>
        <DataTrigger Binding="{Binding ElementName=MyColumn1,Path=Width}" Value=".75*">
            <Setter TargetName="rect" Property="Fill" Value="Yellow"></Setter>
        </DataTrigger>
        <DataTrigger Binding="{Binding ElementName=MyColumn1,Path=Width}" Value="1">
            <Setter TargetName="rect" Property="Fill" Value="Green"></Setter>
        </DataTrigger>
    </Grid.Triggers>
    <Rectangle x:Name="rect" Grid.Column="0" HorizontalAlignment="Stretch"></Rectangle>
    <Rectangle Grid.Column="1" Fill="Blue"></Rectangle>

</Grid>
Run Code Online (Sandbox Code Playgroud)

wpf styles datatrigger

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

ValidationResult.MemberNames 属性是否会包含多个值?

我用反射器进行搜索,但没有找到一种ValidationResult.MemberNames应该包含多个值的情况。

所以,首先我想知道为什么 MS 必须这样做IEnumerable<string>,那么既然他们已经这样做了,我可以相信这个属性只会返回一个值吗?


关于 DataAnnotations 验证系统的更新我发现更多的马虎:

  1. 如果错误不再存在,TryValidateProperty则 和应该已从validationResultsTryValidateObject参数中删除错误。
  2. ValidationResult 应该覆盖 Equals 和 GetHashCode。
  3. 为什么 ValidationResult.ErrorMessage 是可变的!?我自己无法构建 EqualityComparer!
  4. 如果 DataTypeAttribute 仅用于表示问题,为什么它继承 ValidationAttribute,这只是误导,我必须努力奋斗,直到我明白(经过反思)它不起作用。MS只是没有实施它。

而这样的例子不胜枚举。

validation validationattribute data-annotations

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

取消VB.NET中的TabControl选项卡选择

真的让我的大脑陷入困境,我确信这很简单,我很想念.

基本上我有一个带有两个标签的表单.我正在检查每个选项卡上的控件,看它们是否脏,并且如果当前选项卡上有更改,则希望阻止用户单击选项卡.

我曾经想过,如果我检查脏变量并将选项卡索引设置为未被选中的那个我就没事了但是每次我以编程方式设置选项卡的属性时,它会触发一大堆选项卡的事件产生不希望的结果,例如显示正确的控制集但选择了错误的选项卡.

这是我尽可能接近它的代码.

Private Sub objTabs_Selected(ByVal sender As Object, ByVal e As System.Windows.Forms.TabControlEventArgs) Handles objTabs.Selected
    If bIsDirty Then
        If Me.objTabs.SelectedIndex = 1 Then
            Me.objTabs.SelectedTab = tabLetterofCreditBanks
            Me.objTabs.SelectTab(0)
        Else
            Me.objTabs.SelectedTab = tabWireTransferBanks
            Me.objTabs.SelectTab(1)
        End If
    End If
End Sub
Run Code Online (Sandbox Code Playgroud)

提前致谢.

vb.net winforms

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

WPF二维DataGrid/ListView?

我有一个Item由3列组成的表:

ItemId int PK
RoomId int FK
UnitId int FK
Cost money
Run Code Online (Sandbox Code Playgroud)

我想要一个DataGrid/ListView具有动态生成的列和行,代表以下pivot:

       Room1 Room2 Room3 Room4 
Unit1  $34   $72   $48   $98
Unit2  $64   $56   $67   $24
Unit3  $24   $34   $34   $34
Run Code Online (Sandbox Code Playgroud)

我更喜欢控制或帮助现有的而不是脏功能,因为我需要这个场景很多,但任何事情都是热烈欢迎的.

我希望有Room1Unit1等作为行和列标题,并相应地设置生成/细胞.

wpf datagrid listview pivot-table multidimensional-array

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

禁用WPF TreeView(或TreeViewItem)选择?

是否有一个很好的方法(除了重新整理TreeViewItem.Template)以禁用选择TreeView

我基本上寻找的ItemsControl风格TreeView(An ItemsControl是最好用'禁用'选择ListBox,阅读这篇文章)

wpf treeview xaml itemscontrol selection

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

在C#中替代VB.NET的类型转换函数(CBool​​)?

CBool在C#中有没有替代VB的关键字?

所有其他功能呢?

CBool将变成一个布尔任何有效的布尔:0,"False",null等.

.net vb.net type-conversion vb.net-to-c#

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

Visual Studio查找和替换正则表达式

我想用VB.NET替换C#属性,这意味着[Serializable]应该成为<Serializable>.

该模式(\[)(.+)(\])确实找到了结果,但我不知道如何用适当的括号替换第一组和最后一组.

我读了这个页面,但是我不明白如何使用大括号进行F&R,我试图用它包装组但是它不起作用.

regex replace visual-studio-2010 visual-studio

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

小组枚举成员?

我希望能够确定枚举值是否属于某个组.看到伪示例:

[Flags]
public enum Animals
{
  Dog = 1,
  Cat = 2,
  WildAnimal = Dog | Cat,
  Fly = 4,
  Bee = 8,
  Insect = Fly | Bee
}

public static bool IsInsect(Animals animals)
{
  return Animals.Insect.Qualifies(animals);
}

public static bool Qualifies(this Animals groupName, Animals value)
{
  //Is there a bitwise operation for it?
}
Run Code Online (Sandbox Code Playgroud)

c# enums bit-manipulation bitwise-operators

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

使用Regex检查字符串是否有效

我需要检查用户的输入是否是有效的CSS语法(输入字符串基本上是一个CSS文件).它可以包含类,选择器!important等.

我没有开始研究它,因为我希望已经有一些正则表达式语法,所以我不必从头开始.

我尝试使用谷歌搜索,但我发现的是部分css匹配字符串,而不是验证所有可能的CSS的正则表达式.

css regex validation css3

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