小编A. *_*esa的帖子

Angular 组件 - 封装 BehaviorSubject 的输出

我有一个具有内部状态的组件,存储在 RxJS 中BehaviorSubject(顺便说一下,包含某个 DOM 元素的大小)。

我想将这个状态公开为一个@Output()属性。

我能想到的最幼稚的实现是这样的:

// inside myComponent

private _state$ = new BehaviorSubject<Something>(...);

@Output() stateChange = new EventEmitter<Something>();

constructor() {
  // skipping unsubscription for the sake of this simplistic example
  this._state$.subscribe(newState => this.stateChange.emit(newState);
}

Run Code Online (Sandbox Code Playgroud)

BehaviorSubject但是,一旦有新订阅,这不会像 a 那样立即发出当前存储的值。迟到的订阅者将无法获得当前的价值。

对于这样的情况有没有简单的方法?我想公开状态并基本上不再担心事件的顺序,就像我对一个简单的BehaviorSubject<T>.

rxjs angular

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

泛型类与泛型方法

我正在设计一个能够反序列化某些文件的类,我想知道这两个选项的含义是什么:

// option 1 - generic class
public class XmlConfigurationManager<T>
{
    public T ReadConfigurationAndWriteDefault(string configurationPath, Func<T> defaultConfiguration)
    {
        ...
    }

    public T Deserialize(string configurationPath)
    {
        ...
    }
}

// option 2 - generic methods in non generic class
public class XmlConfigurationManager
{
    public T ReadConfigurationAndWriteDefault<T>(string configurationPath, Func<T> defaultConfiguration)
    {
        ...
    }

    public T Deserialize<T>(string configurationPath)
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我似乎无法找到有关两者之间差异的任何提示。

这两个选项如何比较?会有什么区别吗?在评估设计时是否有任何值得注意的地方需要牢记?

c# generics

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

Mapster - 如何忽略空属性的映射

我正在使用 Mapster 将 Dto 实例映射到 Model 对象。

Dto 由 Javascript 客户端发送,仅发送更新的属性。

我想忽略空值,并让 Mapster 对此属性保留模型实例不变。

一个简化的示例可以更好地解释该场景:

// My .Net Dto class, used for client/server communication.
public class PersonDto
{
  public string Id { get; set; }
  public string Name { get; set; }
  public string Family { get; set; }
}

// My Model class. Let's assume is the same data as per the Dto.
public class Person
{
  public string Id { get; set; }
  public string Name { get; …
Run Code Online (Sandbox Code Playgroud)

c# mapping mapster

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

Angular 应用程序如何启动?

谁能描述一下 Angular 的初创公司吗?Google上的一些文章显示执行从main.ts开始,而另一些文章显示执行从index.html开始。

angular

3
推荐指数
2
解决办法
7690
查看次数

MongoDb C# 驱动程序 - 将 List&lt;enum&gt; 序列化为 string[]

我有一个属性类型为 的类List<SomeEnum>。像这样的东西:

public enum MyEnum
{
  A,
  B
}

public class MyClass
{
    public string Id { get; set; }
    public List<MyEnum> Values { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我已经在EnumRepresentationConvention以这种方式使用:

ConventionRegistry.Register("EnumStringConvention", new ConventionPack { new EnumRepresentationConvention(BsonType.String) }, t => true);
Run Code Online (Sandbox Code Playgroud)

尽管如此,该Values属性仍被序列化为一个整数数组(简单的枚举属性被正确地处理为整数)。似乎在列表序列化的上下文中不使用该约定。

如何强制序列化程序写入字符串而不是整数?

c# enums serialization mongodb

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

在 C# 中实现记忆化

我知道这个话题(记忆)已经讨论了很多(比如这里),但是我找不到任何满足我想要的 DRY 原则的答案,所以请阅读整个问题和我想要解决的三点.

我有一个像这样的简单支持类:

public class Memoized<T1, TResult>
{
    private readonly Func<T1, TResult> _f;

    private readonly Dictionary<T1, TResult> _cache = new Dictionary<T1, TResult>();

    public Memoized(Func<T1, TResult> f)
    {
        _f = f;
    }

    public TResult Invoke(T1 p1)
    {
        if (p1 == null) throw new ArgumentNullException(nameof(p1));

        if (_cache.TryGetValue(p1, out var res)) return res;

        return _cache[p1] = _f(p1);
    }
    public static Func<T1, TResult> Of(Func<T1, TResult> f)
    {
        var memo = new Memoized<T1, TResult>(f);

        return x => memo.Invoke(x);
    }
}
Run Code Online (Sandbox Code Playgroud)

没有什么特别花哨的,但它允许我这样做:

public …
Run Code Online (Sandbox Code Playgroud)

c# functional-programming memoization

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