小编Hei*_*nzi的帖子

为什么VB.NET中的实现属性必须匹配'ReadOnly'说明符?

以下适用于C#:

interface I
{
    int X { get; }
}

class C : I
{
    public int X
    {
        get { ... }
        set { ... }
    }
}
Run Code Online (Sandbox Code Playgroud)

以下在VB.NET中不起作用:

Interface I
    ReadOnly Property X As Integer
End Interface

Class C
    Implements I

    Public Property X As Integer Implements I.X
        Get
            ...
        End Get
        Set(value As Integer)
            ...
        End Set
    End Property
End Class
Run Code Online (Sandbox Code Playgroud)

错误信息Implementing property must have matching 'ReadOnly' or 'WriteOnly' specifiers非常明显,所以我知道这里有什么问题.这也不是一个大问题,因为解决这个限制很容易.

不过我很好奇:有谁知道为什么VB设计师决定以不同于C#的方式处理这种情况?

.net c# vb.net properties interface

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

如何使用德语单词(或使用支持复合名词的任何其他语言)进行CamelCase?

免责声明:如果您认为它不适合StackOverflow,请随意将其关闭为"太局部化".由于这里有相当多的德语社区,我想我会试一试.

CamelCase经常用于编程语言约定(C#中的方法名称,Java中的公共方法名称等).这是很容易用英语做:你正好连接的话并利用每个人的第一个字母:DisplayName,InternalName.

然而,德语在许多情况下支持复合名词.例如," Anzeigename "(DisplayName)是单个名词,但" interner Name "(InternalName)不是.因此,后一种情况很容易被证实:InternerName就像CamelCase的英语规则一样.第一种情况怎么样?有人可以

  • 使用Anzeigename,以保持与德语语法一致,或
  • 使用AnzeigeName,以保持与CamelCase和其他*Name-s(不是单名词)的外观和感觉一致.

对此有一些指导或完善的最佳实践吗?

我意识到只使用英文名称很容易解决这个问题,但是在开发特定于域的软件时,或者当配置文件必须是没有良好英语技能的人可读时,这有时是不可行的.当您确定该软件仅用于德语语境时,为Umsatzsteuervoranmeldung构建英语翻译是没有意义的...

c# language-agnostic localization naming-conventions

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

Generic DataTemplate用于多个GridViewColumns

我有一个显示一些值的GridView:

<ListView ItemsSource="{Binding MyDataSource}">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Date1" DisplayMemberBinding="{Binding Date1}" />
            <GridViewColumn Header="Date2" DisplayMemberBinding="{Binding Date2}" />
            ...other Columns, not necessarily containing dates...
        </GridView>
    </ListView.View>
</ListView>
Run Code Online (Sandbox Code Playgroud)

这很好用.现在我想创建一个以特定方式格式化日期的数据模板:

<DataTemplate x:Key="MySpecialDate">
    <TextBlock Text="{Binding StringFormat={}{0:yyyy.MM.dd}}" />
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

CellTemplate只要DisplayMemberBinding指定,添加将不起作用.因此,我必须删除DisplayMemberBinding属性:

<GridViewColumn Header="Date1" CellTemplate="{StaticResource MySpecialDate}" />
<GridViewColumn Header="Date2" CellTemplate="{StaticResource MySpecialDate}" />
Run Code Online (Sandbox Code Playgroud)

这是一个问题:现在DisplayMemberBinding已经不存在了,我如何告诉GridView要显示哪个属性?GridViewColumn没有DataContext财产.

当然,我可以将属性的名称(Date1resp.Date2)放入DataTemplate中,但是我需要为每个属性设置一个模板,这样做会破坏模板的整个目的.

<!-- I don't want that -->
<DataTemplate x:Key="MySpecialDate1">
    <TextBlock Text="{Binding Date1, StringFormat={}{0:yyyy.MM.dd}}" />
</DataTemplate>
<DataTemplate x:Key="MySpecialDate2"> …
Run Code Online (Sandbox Code Playgroud)

c# wpf xaml listview datatemplate

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

是否可以使用ADO.NET修改MS Access数据库架构?

我需要通过代码修改MS Acess数据库(.mdb)的模式.

由于Jet Engine DDL语句(ALTER TABLE等)的文档很少,我更喜欢使用某种对象库,如DAO(myDatabase.TableDefs("myTable").Fields.Append(myNewField))或ADOX(myCatalog.Tables("myTable").Columns.Append(myNewField))或SMO(仅适用于SQL Server,语法类似) - 你明白了.

是否有像ADOX.NET类似的东西,或者我是否坚持使用DDL语句或引用旧的DAO/ADOX库?

c# database ado.net ms-access dao

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

是否可以在C#中更改finally子句中的返回值?

假设您有一个C#方法,其中包含return一个try块内的语句.是否可以修改finally块中的返回值?

returnfinally块中使用的显而易见的方法将不起作用:

String Foo()
{
    try
    {
        return "A";
    }
    finally
    {
        // Does not compile: "Control cannot leave the body of a finally clause"
        return "B";
    }
}
Run Code Online (Sandbox Code Playgroud)

有趣的是,这可以在VB中完成:Return内部Finally是被禁止的,但是我们可以滥用这样的事实(可能出于向后兼容的原因)VB仍然允许通过将返回值赋值给方法名来修改返回值:

Function Foo() As String    ' Returns "B", really!
    Try
        Return "A"
    Finally
        Foo = "B"
    End Try
End Function
Run Code Online (Sandbox Code Playgroud)

笔记:

  1. 请注意,我纯粹出于科学的好奇心问这个问题; 很明显,像这样的代码非常容易出错并且容易混淆,永远不应该写.

  2. 请注意,我不是在询问try { var x = "A"; return x; …

c# vb.net return

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

Entity Framework是否支持模型中的不同数据类型?

我正在考虑使用EF访问客户系统上安装的旧版SQL Server数据库.

问题是数据库模式不是100%一致的:虽然它们都具有相同(相关)的表和字段,但某些数字字段可能具有不同的数据类型.

据我所知,从应用程序的角度来看,类型是"兼容的":例如,包含小数字的字段可能是smallint客户A的数据库,但int客户B的数据库或包含价格的字段可能是decimal(10,2)在A的数据库上,但float在B的数据库上(是的,这意味着B可能会遇到浮点问题 - 毕竟它是一个遗留数据库).

由于我们不是唯一访问数据库的人,因此更改(并因此统一)模式不是一种选择.实体框架是否能够应对这种情况(即,double如果模型定义声称它是a ,它会优雅地接受SQL Server表中的a decimal(10,2))还是会崩溃?

c# sql-server entity-framework legacy-database

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

在sql server中将日期范围拆分为每月一行

我有一个表有两列名为"from_date"和"to_date"的表

    the table look like:-
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我想要的结果如下: -

from_date            to_date   
-----------         ------------  
2013-11-25           2013-11-30
2013-12-01           2013-12-05
Run Code Online (Sandbox Code Playgroud)

该日期从2013-11-25分为2013-11-30,另一个日期从2013-12-01分到2013-12-05 ......是否有可能像这样分裂?

sql sql-server

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

System.Diagnostics.Trace.WriteLine使用哪个跟踪源?

据我所知,有两种方法可以在.NET中创建跟踪消息.

  1. System.Diagnostics.Trace的静态方法:

    Trace.WriteLine("Something happened");
    
    Run Code Online (Sandbox Code Playgroud)
  2. System.Diagnostics.TraceSource的实例方法:

    var ts = new TraceSource("TraceTest");
    ts.TraceInformation("Something happened");
    
    Run Code Online (Sandbox Code Playgroud)

在我的app.config文件中,我可以为所有内容添加跟踪侦听器:

<system.diagnostics>
    <trace>
        <listeners>
            ...
        </listeners>
    </trace>
</system.diagnostics>
Run Code Online (Sandbox Code Playgroud)

或者对于一个特定的跟踪源:

<system.diagnostics>
    <sources>
        <source name="...">
            <listeners>
                ...
            </listeners>
        </source>
    </sources>
</system.diagnostics>
Run Code Online (Sandbox Code Playgroud)

我的问题

如果我使用第一种方法(System.Diagnostics.Trace的静态方法),使用哪个跟踪源名称?

我已经检查了System.Diagnostics.TraceMSDN页面,但没有找到答案.

.net c# trace system.diagnostics

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

为什么打开第二个 ADO 客户端记录集如此缓慢?

再现

  1. 创建一个包含很多行的 SQL Server 表:

    CREATE TABLE largetable (field int);
    
    INSERT INTO largetable (field)
    SELECT TOP 10000 ROW_NUMBER() OVER(ORDER BY t1.number) 
      FROM master..spt_values t1 CROSS JOIN master..spt_values;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建一个新的 VBA 项目(例如 Access 或 Excel 2016)并添加对“Microsoft ActiveX 数据对象 2.8(或 6.1)库”的引用。

  3. 修改以下重现代码以包含 SQL Server 数据库的正确连接字符串。然后在 VBA 模块中执行它:

    CREATE TABLE largetable (field int);
    
    INSERT INTO largetable (field)
    SELECT TOP 10000 ROW_NUMBER() OVER(ORDER BY t1.number) 
      FROM master..spt_values t1 CROSS JOIN master..spt_values;
    
    Run Code Online (Sandbox Code Playgroud)

问题

正如您所看到的,如果已经打开了另一个客户端游标,则打开第二个客户端游标的速度会非常慢。我想知道为什么会发生这种情况以及我可以采取什么措施


更多细节

使用 SQL Server Profiler,我可以看到“慢”和“快”场景有所不同。

这就是“快速”查询的样子: …

sql-server ms-access vba ado

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

如何在不抑制警告的情况下在 VB.NET 中使用过时方法实现接口?

我有一个 interface I,我刚刚决定弃用方法OldMethod(因为它的名字很糟糕,因为我想要额外的参数,你命名它)并建议我的库的用户NewMethod改用。因此,我扩展I如下:

Interface I
    <Obsolete("Use NewMethod instead.")>
    Sub OldMethod()
    Sub NewMethod()
End Interface
Run Code Online (Sandbox Code Playgroud)

但是,现在我实现的 所有类I都会收到编译器警告:

Class C
    Implements I

    ' The following line yields warning BC40000 
    Public Sub OldMethod() Implements I.OldMethod
        Throw New NotImplementedException()
    End Sub

    Public Sub NewMethod() Implements I.NewMethod
        Throw New NotImplementedException()
    End Sub
End Class
Run Code Online (Sandbox Code Playgroud)

这对我来说没有意义:要实现I(作为一个整体,它并没有过时),我需要实现OldMethod. C# 中的相应代码编译得很好并且不会产生警告:

interface I
{
    [Obsolete("Use NewMethod instead.")]
    void OldMethod();
    void NewMethod(); …
Run Code Online (Sandbox Code Playgroud)

vb.net interface obsolete

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