我有一个具有内部状态的组件,存储在 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>.
我正在设计一个能够反序列化某些文件的类,我想知道这两个选项的含义是什么:
// 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)
我似乎无法找到有关两者之间差异的任何提示。
这两个选项如何比较?会有什么区别吗?在评估设计时是否有任何值得注意的地方需要牢记?
我正在使用 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) 谁能描述一下 Angular 的初创公司吗?Google上的一些文章显示执行从main.ts开始,而另一些文章显示执行从index.html开始。
我有一个属性类型为 的类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属性仍被序列化为一个整数数组(简单的枚举属性被正确地处理为整数)。似乎在列表序列化的上下文中不使用该约定。
如何强制序列化程序写入字符串而不是整数?
我知道这个话题(记忆)已经讨论了很多(比如这里),但是我找不到任何满足我想要的 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)