小编djs*_*djs的帖子

AutoMapper和继承 - 如何映射?

有这种情况:

public class Base {  public string Name; }

public Class ClassA :Base {  public int32 Number;  }

public Class ClassB :Base { public string Description;}

public Class DTO {
  public string Name;
  public int32 Number;
  public string Description;
}
Run Code Online (Sandbox Code Playgroud)

我的IList<Base> 地图是:

AutoMapper.Mapper.CreateMap<IList<Base>, IList<DTO>>()
   .ForMember(dest => dest.Number, opt => opt.Ignore())
   .ForMember(dest => dest.Description, opt => opt.Ignore());

AutoMapper.Mapper.CreateMap<ClassA, DTo>()
   .ForMember(dest => dest.Description, opt => opt.Ignore());

AutoMapper.Mapper.CreateMap<ClassB, DTO>()
   .ForMember(dest => dest.Number, opt => opt.Ignore())

Mapper.AssertConfigurationIsValid(); //Is OK!
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时,不会映射ClassA或ClassB中的属性:

IList<DTO>= AutoMapper.Mapper.Map<IList<Base>,IList<DTO>>(baseList);
Run Code Online (Sandbox Code Playgroud)

如何映射在 …

c# inheritance automapper

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

c#Resharper'没有在项目中找到测试'/'不确定:测试未运行'

我安装了ReSharper v8.2.1.我有一个包含几个测试项目的VS2013解决方案.他们中的大多数工作得很好.但是,有一个项目给我带来了麻烦.

在解决方案资源管理器中,我右键单击项目并选择"运行单元测试"并得到错误"在项目中找不到测试".如果我右键单击其中一个包含测试的.cs文件并选择"运行单元测试",我会收到错误"文件中未找到单元测试".如果我打开文件,我会看到预期的测试图标:Resharper测试图标

打开文件并运行测试后,它最终将它们添加到Unit Test Sessions窗口.但它们都是"不确定的:测试没有运行".我尝试在测试中和TestInitialize方法中设置断点,但都没有被击中.

值得一提的是,这些测试直到最近都运行良好.它似乎是在我取消了另一个项目的长期测试之后开始的.但是没有代码或项目或解决方案的更改.我删除了我的源代码并从SVN获得了新鲜内容.我甚至删除了我的AppData\Local\JetBrains文件夹,以确保没有缓存的东西.

Resharper如何确定应该运行哪些测试?任何人都有其他建议让这些测试再次运行?

更新:我卸载了ReSharper以消除它的等式.我仍然无法运行这个单元测试子集.

然后,在Visual Studio中,我打开TEST -> Test Settings -> Default Processor Architecture并将其更改x86x64.我的测试现在会运行!我仍然没有理解为什么这个项目不能在x86模式下运行,但我很高兴再次运行我的所有测试!

但是,我重新安装了ReSharper,这次是v9.0 Update 1,现在无论我如何设置架构,这个单元测试都不会再次运行.我回过头来了解清除缓存的所有答案和建议,但仍然没有运气.

c# mstest .net-4.5 visual-studio-2013 resharper-9.0

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

GetExecutingAssembly()用于不同程序集中的派生类

我有一个插件架构,其中在主应用程序中定义了一个抽象基类.它使用反射来加载具有基类的派生实现的程序集.我想获取包含派生对象的程序集的版本信息.这是我的基类:

namespace My.AppNameSpace
{
    public abstract class BaseClass
    {
        public Version Version
        {
            get
            {
                Assembly assembly = Assembly.GetExecutingAssembly();
                FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(assembly.Location);
                string version = fvi.FileVersion;
                return new Version(version);
            }
        }

        public abstract void DoStuff();
    }
}
Run Code Online (Sandbox Code Playgroud)

由于基类是主应用程序集的一部分,因此它始终返回正在执行的应用程序的版本信息,而不是包含派生类实现的.dll.我可以将版本访问器更改为abstract,并且它可以按照我的意愿运行.但是我需要在每个实现插件中添加相同的几行代码.

是否有一些技巧从一个单独的程序集中存在的基类中的代码中获取派生对象的版本信息?

.net c# reflection .net-assembly

12
推荐指数
2
解决办法
2071
查看次数

.Net Core 配置CORS同时允许所有子域和所有localhost端口

我想允许所有内部网站CORS请求到一个共同的内部API( *.myintra.net),并从所有localhost端口(当我们在IIS Express中,即本地调试各种应用程序http://localhost:12345http://localhost:54321等等)。

这个答案向我展示了如何使用SetIsOriginAllowedToAllowWildcardSubdomains()以允许所有子域。

这个答案向我展示了如何localhost使用SetIsOriginAllowed()委托函数来允许任何端口。

但是,这些选项似乎不能一起使用。我的配置:

private bool AllowLocalhost(string origin)
{
    var uri = new Uri(origin);
    return (uri.Host == "localhost");
}

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options =>
    {
        string[] corsList = "https://*.myintra.net,https://some.specificurl.com".Split(",");
        options.AddPolicy("CorsPolicy", builder =>
        {
            builder
            .WithOrigins(corsList.ToArray())
            .SetIsOriginAllowedToAllowWildcardSubdomains()
            .SetIsOriginAllowed(origin => AllowLocalhost(origin)) // disallows calls from myapp.myintra.net since it doesn't uri.Host match "localhost"
            ...();
        });
    });
    ...
}
Run Code Online (Sandbox Code Playgroud)

我可以交换配置的顺序:

.SetIsOriginAllowed(origin => AllowLocalhost(origin))
.SetIsOriginAllowedToAllowWildcardSubdomains()
Run Code Online (Sandbox Code Playgroud)

但是该 …

c# cors asp.net-core asp.net-core-3.1

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

SqlBulkCopy 在单个记录上?

我的软件可以部署在两种不同的配置中:一种是我在一天中偶尔收到单个数据点的滴流,另一种是我在一天结束时获得所有数据的转储。显然,对于日终转储,我将使用SqlBulkCopy()具有可配置批量大小的命令。

但是,为了简单起见,我想通过将批量大小设置为 1,在trickle-feed 中使用相同的代码。这样做是否会产生很大的开销?INSERT我对滴流馈送进行单次调用会更好吗?

工作流程如下所示:

ICollection<MyClass> dataPoints = ...;
public void AddDataPoint(MyClass data)
{
    dataPoints.Add(data);
    if (dataPoints.Count >= ConfigurableBatchSize)
    {
        DoBulkCopy(dataPoints); // converts MyClass objects into rows of a DataTable, etc
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# sql-server performance

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

用于确定标量函数的返回类型的 SQL 查询

我知道我可以查询以查看函数的参数数据类型,如下所示:

SELECT st.name
FROM sys.objects o
    JOIN sys.all_parameters ap ON ap.object_id = o.object_id
    JOIN sys.systypes st ON st.type = ap.system_type_id
WHERE o.object_id = OBJECT_ID(N'[dbo].[fn_GetPercent]') AND o.type = N'FN'
Run Code Online (Sandbox Code Playgroud)

如何以编程方式检查此函数的返回类型?我可以加入另一个sys表来获取该信息吗?

我正在使用 SQL Server 2012,但我希望也能向后兼容 2008 年。

sql-server

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

我应该在C++/CLI类中使用C#对象的引用还是实例?

在托管的c ++类中,我应该使用我在另一个库中实现的C#类的引用还是实例?

考虑这个例子:

// MyManagedClass.h
#pragma once

using namespace System::Collections::Generic;
using namespace My::Namespace::MyCSharpLib;

namespace My::Namespace::MyManagedLib
{
    public ref class MyManagedClass
    {
    public:
        MyCSharpClass myInst; // i have an instance!
        MyCSharpClass ^myRef; // need to do gcnew

        List<MyCSharpClass ^> listInst; // i have an instance!
        List<MyCSharpClass ^> ^listRef; // need to do gcnew
    };
}
Run Code Online (Sandbox Code Playgroud)

然后从C#代码调用托管类:

// driver.cs
using My.Namespace.MyCSharpLib;
using My.Namespace.MyManagedLib;

public class Driver
{
    private static void Main(string[] args)
    {
        MyManagedClass mmc = new MyManagedClass();
        DoStuff(mmc);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的直觉告诉我,我应该使用 …

c++-cli

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

如何将SpecFlow表转换为字符串数组

我正在为文本文件生成内容并尝试使用SpecFlow表测试输出.我的Then陈述如下:

Then the content should be 
| Line           |
| This is Line 1 |
| This is Line 2 |
| etc...         |
Run Code Online (Sandbox Code Playgroud)

我将这变成Step文件中的一个字符串数组,如下所示:

[Then(@"the content should be")]
public void ThenTheContentShouldBe(Table table)
{
    string[] expectedLines = table.Rows.Select(x => x.Values.FirstOrDefault()).ToArray();
    ...
}
Run Code Online (Sandbox Code Playgroud)

这将给我一个包含3个元素的字符串数组,忽略第一个"Line"作为表头.但感觉有点尴尬.有没有更好的方法将其变成一个数组string?奖励点如果它也可以转换成数组不可变类型,如int等.

c# specflow

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

Foreach通过包含c ++指针的向量

我做了一个地图,里面装满了这样的矢量:

std::map<int, std::vector<CClass*>> pointers = getMap();
Run Code Online (Sandbox Code Playgroud)

现在我想通过地图的每个插槽,也可以浏览存储在地图中的矢量的每个插槽.

这是它如何通过地图:

for (std::map<int, std::vector<CClass*>>::iterator it = pointers.begin(); it != pointers.end(); it++) 
Run Code Online (Sandbox Code Playgroud)

这很好用,它就像我想要的那样遍历每个对象.

但现在我想通过向量中的每个插槽,我尝试这样:

for (std::vector<CClass*>::iterator playerIt = it->second.begin(); playerIt != it->second.end(); playerIt++) 
Run Code Online (Sandbox Code Playgroud)

如果我想访问存储在其中的值,编译器会给我这个错误:

file.cpp(552) : error C2839: Ungültiger Rückgabetyp 'CClass **' für überladenen Operator '->'
Run Code Online (Sandbox Code Playgroud)

这意味着"超重运营商'无效的返回类型'CClass**' - >'

问候

c++ dictionary iterator for-loop vector

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