小编Luk*_* Vo的帖子

如何使用AutoMapper将目标对象与源对象中的子对象进行映射?

我有这样的源和目标对象:

class ProductWithCategories // Source class
{
    public Product Product { get; set; } // Product is an EF entity class
    public IEnumerable<Category> Categories { get; set; }
}

class ProductViewModel // Dest class
{
    public int Id { get; set; }
    // Other properties with the same name as Product class

    public IEnumerable<CategoryViewModel> Categories { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

所以,我需要将值映射source.Productdest,然后映射source.Categoriesdest.Categories.AutoMapper有可能吗?

我试过这个,当它失败时我并不感到惊讶:

        config.CreateMap<ProductWithCategories, ProductViewModel>()
            .ForMember(q => q, option => option.MapFrom(q => q.Product)) …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework automapper

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

为什么界面只能在顶级类中声明?

好吧,我知道这是规则:

根据JLS:8.1.3内部类和封闭实例,内部类可能不会声明静态初始化器或成员接口.内部类可能不会声明静态成员,除非它们是编译时常量字段.

根据8.5.2静态成员类型声明,"成员接口始终是隐式静态的.允许但不需要声明成员接口明确列出静态修饰符".他们总是顶级的,而不是内心的.

我只是想知道为什么.如果我们被允许在内部类中声明接口会发生什么?如果我将内部类放入另一个类文件中,内部类是否会成为顶级类?

java oop interface class inner-classes

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

获取获取请求的浏览器 Accept-Language 标头值

我刚刚意识到默认情况下fetch不发送Accept-Language标头,因此我计划添加它。但是,我还没有找到任何方法来获取浏览器应生成的字符串。

例如,在我的浏览器中,所有正常请求都有一个很好的 Accept-Language 值:

en-US,en;q=0.9,ja;q=0.8,vi;q=0.7,la;q=0.6

我的问题可以通过以下任一选项解决:

  • 是否有一个声明告诉浏览器包含 Accept-Language 标头fetch
  • 有没有办法获取该字符串而不是从中生成它 navigator.languages?目前我正在使用这种方法,但我自己做了,不确定它是否矫枉过正/不好。如果可能的话,我更愿意使用内置方式。
var getAcceptLanguageValue = () => {
    // Assume there are less than 10 languages
    let q = 1;

    return navigator.languages
        .slice(0, 10)
        .map(l => `${l};q=0.${10-q++}`)
        .join(",");
};
Run Code Online (Sandbox Code Playgroud)

我得到的结果显然并不相同:

en-US;q=0.9,en;q=0.8,ja;q=0.7,vi;q=0.6,la;q=0.5

javascript localization http-accept-language

10
推荐指数
0
解决办法
1703
查看次数

为什么 IMemoryCache.GetOrCreateAsync 返回“TItem”?(可为空)而不是“TItem”?

的扩展GetOrCreateAsync方法IMemoryCache

public static async Task<TItem?> GetOrCreateAsync<TItem>(this IMemoryCache cache, object key, Func<ICacheEntry, Task<TItem>> factory)
{
    if (!cache.TryGetValue(key, out object? result))
    {
        using ICacheEntry entry = cache.CreateEntry(key);

        result = await factory(entry).ConfigureAwait(false);
        entry.Value = result;
    }

    return (TItem?)result;
}
Run Code Online (Sandbox Code Playgroud)

为什么他们会回来TItem?而不是仅仅TItem?假设我的factory方法永远不会返回 null,那么可以安全地假设它永远不会返回null并使用 null-forgiving 运算符忽略它!吗?

public async Task<Foo> GetFooAsync()
    => (await cache.GetOrCreateAsync("Foo", async _ => new Foo()))!
Run Code Online (Sandbox Code Playgroud)

.net c# memorycache nullable-reference-types

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

在Android中的布局设计中使用特殊符号(<,>)

我需要两个导航按钮,其文本是<>.但是,编译器不允许我使用这些符号,即使我使用\<\>.

无论如何将这些符号放入XML设计文件中?

xml android symbols xml-layout

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

无法访问已实现的属性(来自界面)

我有一个属性接口:

public interface IEntityModifier
{

    ...
    bool AutoDetachOnFinished { get; set; }
    bool Finished { get; }
    ...

}
Run Code Online (Sandbox Code Playgroud)

然后我实现它:

    bool IEntityModifier.AutoDetachOnFinished { get; set; }
    bool IEntityModifier.Finished { get { return this.mFinished; } }
Run Code Online (Sandbox Code Playgroud)

但是当我需要AutoDetachOnFinished在同一个类中访问时,会弹出一个编译器错误:

    void IEntityModifier.Update(IEntity pEntity, Microsoft.Xna.Framework.GameTime pGameTime)
    {
        if (!this.mFinished)
        {
            this.Value += this.Delta * (float)pGameTime.ElapsedGameTime.TotalSeconds;

            if (this.Value >= this.Max)
            {
                this.Value = this.Max;
                this.mFinished = true;
                if (this.AutoDetachOnFinished) { /* Error Here */ }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

错误消息:

14'MEngine.Entities.EntityModifier.SingleValueEntityModifier'不包含'AutoDetachOnFinished'的定义,并且没有扩展方法'AutoDetachOnFinished'接受类型'MEngine.Entities.EntityModifier.SingleValueEntityModifier'的第一个参数可以找到(你错过了使用吗?指令或程序集引用?)

我有两个问题:

  1. 如果我删除IEntityModifier.s …

.net c# syntax

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

将一个IQueryable类型转换为Linq to Entities中的接口

我的泛型类中有以下方法:

// This is the class declaration
public abstract class BaseService<TEntity, TKey> : IBaseService<TEntity, TKey> where TEntity : class, IEntity<TKey>

// The Method
public IQueryable<TEntity> GetActive()
{
    if (typeof(IActivable).IsAssignableFrom(typeof(TEntity)))
    {
        return this.repository.Get().Cast<IActivable>()
            .Where(q => q.Active)
            .Cast<TEntity>();
    }
    else
    {
        return this.Get();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是界面:

public interface IActivable
{
    bool Active { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

基本上,TEntity是一个实体(POCO)类,如果它们具有Active属性,则可以实现IActivable .我希望该方法返回所有Active值为true的记录.但是,我有这个错误:

无法将类型"WebTest.Models.Entities.Product"转换为"Data.IActivable"类型.LINQ to Entities仅支持转换EDM原语或枚举类型.

我理解为什么会出现这种错误.但关于SO的文章对我的案例没有任何有效的解决方案.用它Cast或其他方式可以实现吗?注意:我不想转换为IEnumerable,我想保留IQueryable.

c# linq entity-framework

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

处理 Net 6 中的可空实体和实体框架实体

使用 Net 6 和实体框架我有以下实体:

public class Address {

  public Int32 Id { get; set; }
  public String CountryCode { get; set; }  
  public String Locality { get; set; }
  public Point Location { get; set; }

  public virtual Country Country { get; set; }
  public virtual ICollection<User> Users { get; set; } = new List<User>();  

}
Run Code Online (Sandbox Code Playgroud)

在项目定义中<Nullable>enable</Nullable>,我收到警告:

Non-nullable property '...' must contain a non-null value when exiting constructor. Consider declaring the property as nullable. 
Run Code Online (Sandbox Code Playgroud)

在地址属性中:

CountryCode, Locality, Location …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework-core .net-core .net-6.0

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

添加 void 操作时,“缺少返回类型注释的函数表达式隐式具有“任意”返回类型”

我在 TypeScript 上遇到了一个奇怪的问题。我最近了解了void ...operator,因为我需要应用它所以eslint不会报告no-floating-promises然而,这个特定的代码片段以某种方式导致了我无法在 TypeScript Playground 上重现的问题:

class A {

  async a() {}

  async onTickAsync(repeat: boolean) {
    try {
      await this.a();
    } catch(e) {
      console.error(e);
    } finally {
      if (repeat) {
        window.setTimeout(() => void this.onTickAsync(true), 200);
      }
    }
  }

}
Run Code Online (Sandbox Code Playgroud)

VS Code 会报这个错误:

在此输入图像描述

TS7011:缺少返回类型注释的函数表达式隐式具有“any”返回类型。

但是,该问题在TS Playground上无法重现。VS Code 和 Playground 都使用 TypeScript 4.5.4。这是我的tsconfig.json

class A {

  async a() {}

  async onTickAsync(repeat: boolean) {
    try {
      await this.a();
    } catch(e) { …
Run Code Online (Sandbox Code Playgroud)

function void any typescript

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

编译/编码时的值验证

我使用亚马逊SDK并注意到这个"警告":

在此输入图像描述

这怎么可能?我没有安装任何插件或扩展,我只是通过Nuget安装AWS SDK.它是标准的C#/ Visual Studio功能吗?

c# visual-studio

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