相关疑难解决方法(0)

.NET Core中没有AppDomains!为什么?

微软是否有理由选择不支持.NET Core中的AppDomains?

AppDomains在构建长时间运行的服务器应用程序时特别有用,我们可能希望更新服务器加载的程序集是一种优雅的方式,而无需关闭服务器.

如果没有AppDomains,我们如何在长时间运行的服务器进程中替换我们的程序集?

AppDomains还为我们提供了一种隔离服务器代码不同部分的方法.比如,自定义websocket服务器可以在主appdomain中具有套接字代码,而我们的服务在辅助appdomain中运行.

如果没有AppDomains,则无法使用上述方案.

我可以看到一个论点,可能会讨论使用VM的云概念来处理程序集更改而不必承担AppDomains的开销.但这是微软的想法或说法吗?或者他们有针对上述情况的具体原因和替代方案?

.net clr appdomain .net-core

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

现实世界使用Reflection.Emit

在我读过的所有书中,他们经常说,你想要动态生成IL的情况并不多,但他们没有给出任何有意义的例子.

在看到Reflection.Emit作为游戏公司的工作要求后,我很好奇其他地方正在使用它.

我现在想知道在现实世界中是否有任何情况,这是解决问题的最佳方法.也许它被用作设计模式的实现?

注意 我想PostSharp/AOP使用它.

.net c# reflection reflection.emit

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

动态创建枚举

我有一个以下结构的枚举:

public enum DType
{       
    LMS =  0,
    DNP = -9,
    TSP = -2,
    ONM =  5,
    DLS =  9,
    NDS =  1
}
Run Code Online (Sandbox Code Playgroud)

我正在使用这个枚举来获取名称和值.由于需要添加更多类型,我需要从XML文件中读取类型和值.有没有办法可以从XML文件中动态创建这个枚举,这样我就可以保留程序结构.

c#

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

使用数据库中的值填充枚举

我有一个映射String-> Integer的表.

我不是静态地创建枚举,而是想用数据库中的值填充枚举.这可能吗 ?

所以,而不是静态地删除:

public enum Size { SMALL(0), MEDIUM(1), LARGE(2), SUPERSIZE(3) };
Run Code Online (Sandbox Code Playgroud)

我想动态创建这个枚举,因为数字{0,1,2,3}基本上是随机的(因为它们是由数据库的AUTOINCREMENT列自动生成的).

java enumeration hashmap

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

使用.NET的CodeDom创建枚举

我想使用创建枚举CodeDom API.我在互联网上搜索得足够多,而且我得到的结果几乎没用.

我想要产生的是

public enum bug_tracker_type
{
    [Description("Bugzilla")]
    Bugzilla,
    [Description("Debbugs")]
    Debbugs,
    [Description("PHP Project Bugtracker")]
    PHP_Project_Bugtracker,
    [Description("Google Code")]
    Google_Code
}
Run Code Online (Sandbox Code Playgroud)

我使用CodeTypeDeclaration并将其IsEnum属性设置为true,创建了一个名称,并设置了它的属性.

现在最大的问题是如何填充身体?

我试过了

CodeTypeMember mem = new CodeTypeMember();
mem.Name = WadlSharpUtils.CreateIdentifier(discreteValue.value);
mem.CustomAttributes.Add(new CodeAttributeDeclaration(discreteValue.value));
// enumCandidate is an instance of CodeTypeDeclaration
enumCandidate.Members.Add(mem);
Run Code Online (Sandbox Code Playgroud)

虽然使用这个解决方案我可以生成描述属性,但行结束;与否,

.net c# codedom

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

如何定义多个值映射到单个标签的枚举?

假设,为了这个例子,我试图解析一个文件,该文件指定记录中的两个任意字节代表星期几,因此:

DayOfWeek:

 - 0    = Monday
 - 1    = Tuesday
 - 2    = Wednesday
 - 3    = Thursday
 - 4    = Friday
 - 5    = Saturday
 - 6    = Sunday
 - 7-15 = Reserved for Future Use
Run Code Online (Sandbox Code Playgroud)

我可以定义一个枚举来映射到这个字段,因此:

public enum DaysOfWeek
{
     Monday = 0,
     Tuesday = 1,
     Wednesday = 2,
     Thursday = 3,
     Friday = 4,
     Saturday = 5,
     Sunday = 6
     ReservedForFutureUse
}
Run Code Online (Sandbox Code Playgroud)

但是如何定义有效值ReservedForFutureUse呢?理想情况下,我想做的事情如下:

public enum DaysOfWeek
    {
         Monday = 0,
         Tuesday = 1,
         Wednesday = …
Run Code Online (Sandbox Code Playgroud)

.net c# enums bitflags

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

在C#中运行时填充/更新枚举值

我有Windows应用程序在哪里我需要通过读取名为"Controls.txt"的文本文件在运行时填充枚举值. 作为限制,我不打算使用字典.以下是枚举MyControls中可用的默认值.我只能使用枚举.

public enum MyControls
{
   Button1 = 0,
   Button2 = 1,
   Button3 = 2,
}
Run Code Online (Sandbox Code Playgroud)

如果Controls.txt文件可用,那么枚举的内容应该改变

public enum MyControls
{
   btn1 = 0,
   btn2 = 1,
   btn3 = 2,
}
Run Code Online (Sandbox Code Playgroud)

我该如何实现这一目标.我还在运行时遇到了创建/修改枚举的链接,但无法理解.

c# enums dynamic

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

动态ValueOf类型执行

我想定义一个具有有限元素集的值类型,这些元素又是运行时动态定义列表的元素(例如来自数据库).

有了这个,我希望能够在动态列表上强制执行类型安全(好吧,排序)而不需要在编译时提供任何值.然后,我可以在我的代码中使用新类型作为属性,作为方法中的返回值等.

(注意 - 它不是真正的类型 - "安全",即我追求的编译时检查,而是在方法和属性中概念性地识别"这种类型的值"的能力 - 为了更好的可理解性和代码的可读性. )

伪代码:

type Currency = ["USD", "EUR", "GBP"];
Currency cur = new Currency();
cur = "CAD";     // must throw an exception

Currency.Add("CAD");
cur = "CAD";     // now it would NOT throw an exception
Run Code Online (Sandbox Code Playgroud)

它有点像"String"的子类,但String是一个密封类,不能派生自.

您还可以将其视为定义为从列表中返回"ValueOf"函数的类型.但这并没有给我一种在C#中定义类型的方法.

有没有合理明智的方法来做我想要的事情?

c#

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