小编mic*_*ael的帖子

C#:有什么方法可以跳过多态中的一个基本调用?

class GrandParent
{
    public virtual void Foo() { ... }
}

class Parent : GrandParent
{
    public override void Foo()
    {
       base.Foo();

       //Do additional work
    }
}

class Child : Parent
{
    public override void Foo()
    {
        //How to skip Parent.Foo and just get to the GrandParent.Foo base?

        //Do additional work
    }
}
Run Code Online (Sandbox Code Playgroud)

如上面的代码所示,我如何让Child.Foo()调用GrandParent.Foo()而不是进入Parent.Foo()?base.Foo()首先带我到Parent类.

c# polymorphism inheritance overriding virtual-functions

9
推荐指数
2
解决办法
3433
查看次数

事件 - 处理程序与直接访问?为什么?

示例代码:

public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(String propertyName) 
{ 
    PropertyChangedEventHandler handler = PropertyChanged; 
    if (handler != null) 
    {
        handler(this, new PropertyChangedEventArgs(propertyName));
    }
}
Run Code Online (Sandbox Code Playgroud)

VS:

public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(String propertyName) 
{ 
    if (PropertyChanged!= null) 
    {
        PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么我总是看到人们创建将PropertyChanged分配给"处理程序"而不是仅使用它?

c# events handler

9
推荐指数
2
解决办法
284
查看次数

LINQ:String.Join一个列表,但事先在该字符串中添加一个字符

我有以下列表:

  • α
  • 公测
  • 查理
  • 三角洲

我想将这些字符串转换为一个字符串,逗号分隔,但我想首先为它们添加一个字符(@符号).最终结果应该是:@alpha,@beta,@charlie,@delta

我现在拥有的是非LINQ方法,但它似乎并不"干净":

String.Concat("@", String.Join(",@", mylist));
Run Code Online (Sandbox Code Playgroud)

c# linq string concat list

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

IDataReader - 获取总行数的任何方法?

有没有办法在使用reader.Read();?迭代行之前获取从SQL查询(来自IDataReader)返回的总行数?

c# datareader rows count

8
推荐指数
2
解决办法
7558
查看次数

C#设置文件:为什么我必须使用Settings.Default?

我只是想知道它为什么Settings.Default.<mysetting>而不仅仅是Settings.<mysetting>

c# settings settings.settings

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

C#:在类实例化上创建一个do-nothing Action

我有一个类,用户可以将Action传入(或不传递).

public class FooClass<T> : BaseClass<T>
{
    public FooClass()
        : this((o) => ()) //This doesn't work...
    {
    }

    public FooClass(Action<T> myAction)
        : base(myAction)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)


基本上,我不能将null传递给我的基类Action.但是,与此同时,我不想强​​迫我的用户传入Action.相反,我希望能够动态创建"无所事事"动作.

c# lambda delegates action

7
推荐指数
2
解决办法
8979
查看次数

单元测试自定义属性类

我有一个custom attribute用于标记成员的(不constructor,不properties):

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false, Inherited = true)]
public sealed class MyCustomAttribute : Attribute { }
Run Code Online (Sandbox Code Playgroud)

我该如何对此进行单元测试?而且,澄清......我知道'什么',但不知道'怎么样'

我假设有一种方法可以对其进行单元测试,以确保其正确AttributeUsage到位?那怎么能这样呢?每次我创建一个mock类并尝试将属性添加到错误的东西时它都不会让我编译,所以如何创建一个糟糕的模拟类来测试呢?

c# attributes unit-testing mocking

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

WPF MVVM - 单元测试命令 - 私有vs公共方法?

基本上,如果我使用MVVM并公开公共ICommands,我的代表应该公开还是私有?

c# wpf unit-testing mvvm icommand

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

Visual Studio 2010 SDK - 如何在XML注释组旁边放置一个装饰?

我无法找到如何执行此操作,Visual Studio SDK参考也不是很有帮助.

我正在试图弄清楚如何获得NormalizedSnapshotSpanCollectionXML评论.我想在它们旁边放一个图标...我不希望每行旁边有一个图标,但只是在每个组的第一行旁边...

///<summary>SomeXML Comment</summary>   [ICON]
///<remarks>some remarks</remarks>
public void Foo()
{
    ///Some false XML comment line that does not get an icon.
}
Run Code Online (Sandbox Code Playgroud)

c# visual-studio-2010 xml-comments adornment visual-studio-sdk

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

使用新的NetSDK项目格式时,在正确构建之前运行MS Fakes

我正在尝试使Microsoft Fakes与我的单元测试项目(net47)一起正常工作,其中我的项目文件格式正在使用新的NetSDK格式。

使用Visual Studio 2019,我可以添加一个Fakes程序集,并且看起来一切正常,直到我们尝试在构建代理上构建/运行测试为止。看起来,当您编译/构建项目时,会生成伪造的程序集,但它们是并行执行的,或者是在构建后执行的(我不确定)。在运行Visual Studio 2019 Enterprise的开发计算机上也会发生相同的问题。


我注意到,如果不存在FakesAssemblies文件夹,则在构建过程中会创建一个文件夹,但是编译会失败,因为没有发现* .Fakes命名空间。第二个编译/构建有效,因为现在已填充FakesAssemblies文件夹。需要注意的一件事是,我将Microsoft Fakes的dll文件放入了我们公司私人提要中的NuGet包中,这样我就可以将其作为NuGet包而不是引用来拉下来。

SampleUnitTests.csproj:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net47</TargetFramework>
    <IsPackable>false</IsPackable>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.1.0" />
    <PackageReference Include="Microsoft.QualityTools.Testing.Fakes" Version="16.0.28621.142" />
    <PackageReference Include="MSTest.TestAdapter" Version="1.4.0" />
    <PackageReference Include="MSTest.TestFramework" Version="1.4.0" />
  </ItemGroup>

  <ItemGroup>
    <Fakes Include="Fakes\*.fakes" />
    <Reference Include="FakesAssemblies\*.dll" />
  </ItemGroup>

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

c# msbuild csproj microsoft-fakes visual-studio-2019

7
推荐指数
0
解决办法
223
查看次数