今天在办公室提出了这个问题.我没有计划做这样的事情,但理论上你可以在SQL中编写一个编译器吗?乍一看,在我看来,虽然对于许多类型的问题非常麻烦,但我觉得它是完整的.
如果它没有完成,那么它需要什么呢?
注意:我不想做任何事情,比如在SQL中编写编译器,我知道这样做会很愚蠢,所以如果我们能够避免讨论,我会很感激.
我在我的应用程序中拥有一组非常大的权限,我使用Flags枚举表示.它正在快速接近长数据类型的实际上限.我不得不提出一个战略,很快就会转变为一个不同的结构.现在,我可以将此列表分解为更小的部分,但是,根据我们的应用程序布局,这已经只是我们应用程序的总体权限的一部分.在管理权限时,我们广泛使用这种区别用于显示目的,如果我可以避免,我宁愿不再重新访问该代码.
还有其他人遇到过这个问题吗?你是怎么过去的?一般的例子很好,但我最感兴趣的是ac#specific example,如果有任何语言特定的技巧可以用来完成工作.
可能不是必需的,但这里是当前为我正在处理的应用程序部分定义的权限列表.
//Subgroup WebAgent
[Flags]
public enum WebAgentPermission : long
{
[DescriptionAttribute("View Rule Group")]
ViewRuleGroup = 1,
[DescriptionAttribute("Add Rule Group")]
AddRuleGroup = 2,
[DescriptionAttribute("Edit Rule Group")]
EditRuleGroup = 4,
[DescriptionAttribute("Delete Rule Group")]
DeleteRuleGroup = 8,
[DescriptionAttribute("View Rule")]
ViewRule = 16,
[DescriptionAttribute("Add Rule")]
AddRule = 32,
[DescriptionAttribute("Edit Rule")]
EditRule = 64,
[DescriptionAttribute("Delete Rule")]
DeleteRule = 128,
[DescriptionAttribute("View Location")]
ViewLocation = 256,
[DescriptionAttribute("Add Location")]
AddLocation = 512,
[DescriptionAttribute("Edit Location")]
EditLocation = 1024,
[DescriptionAttribute("Delete Location")]
DeleteLocation = 2048,
[DescriptionAttribute("View Volume Statistics")] …Run Code Online (Sandbox Code Playgroud) 作为一个简单的例子,我可以说我有以下网格,我正在寻找特定的单元格值.找到后我不再需要处理循环.
foreach(DataGridViewRow row in grid.Rows)
{
foreach(DataGridViewCell cell in row.Cells)
{
if(cell.Value == myValue)
{
//Do Something useful
//break out of both foreach loops.
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是如何在C#中完成的.在Java中,我可以使用标签来命名最外层循环,然后打破该循环,但我似乎无法在C#中找到equivelant.
在c#中实现这一目标的最简洁方法是什么?我知道我可以设置一个布尔标志,并在外部循环中检查它以打破那个,但它似乎太冗长了.
谢谢,
我是一个非常年轻的开发人员,仍处于职业生涯的模拟阶段.我已经阅读了很多关于并发等主题的内容,并使用工作单元来允许业务层控制持久性事务.我甚至实现了一些实现这些主题的痛苦但功能强大的代码.但我真的没见过一个真正优雅的实现的真实世界的例子.我周围没有很多优秀的TDD,模式聚焦的榜样,所以我不得不向外界寻求指导.
所以,我正在寻找一些开源企业应用领域模型的典型例子.最好用c#编写,但其他语言也可以,只要它们是干净优雅的域模型解决方案的好例子.
我真正希望看到的一些优点是并发,业务规则和对象验证,事务/工作单元和半透明日志记录机制的优雅解决方案.我也很想知道一些现实世界的最佳实践是在域模型代码中进行异常处理.
我知道我可以随便开始闯入一些开源项目,并尝试从坏处解读好处,但我希望这里的专家社区能有一些很好的项目想法,以便简化工作.
谢谢你的时间.
我对构建和构造更容易的框架并不感兴趣.我选择的框架,或者是否使用框架是必要的考虑因素,但与我的问题完全不同.除非这些框架本身是开源的,并且是非常好的例子.
我正在寻找的是一个"做对了"的项目,通过灵活且易于维护的代码解决现实世界的问题,这样我就可以亲眼看到,并了解应该如何完成的示例这不是一个简单的50行教程示例.
自从这个概念在.net 2.0中引入以来,我一直在寻找一些很好的指导.
为什么我要在c#中使用不可为空的数据类型?(一个更好的问题是为什么我不能默认选择可空类型,只有在明确有意义时才使用非可空类型.)
在其非可空对等体上选择可空数据类型是否会产生"重大"性能影响?
我更喜欢检查我的值而不是Guid.empty,string.empty,DateTime.MinValue,<= 0等,并且通常使用可空类型.而且我不经常选择可空类型的唯一原因是我脑后的痒感使我觉得它不仅仅是向后兼容性而是强迫额外的'?' 要明确允许空值的字符.
是否有人总是(最常见的)选择可空类型而不是非可空类型?
谢谢你的时间,
我正在为我的雇主对第三方产品进行相当广泛和持续的修改.实现我的代码时的一个主要考虑因素是尽可能地将其隔离,以使来自供应商的更改集成尽可能轻松.到目前为止,实现这一目标的最有用的工具之一是部分类.使用部分类我能够保留我必须在他们自己的文件中实现的任何新方法.
但今天我打了一个打嗝,我需要解决一些问题.假设我需要扩展以下界面.
public partial interface ICondition
{
void MethodA();
void MethodB();
}
Run Code Online (Sandbox Code Playgroud)
通过使接口部分并添加名为ICondition.CompanyName.cs的文件
public partial interface ICondition
{
void MethodC();
}
Run Code Online (Sandbox Code Playgroud)
现在我想要做的是落实以同样的方式接口我宣布它,与MethodA()及MethodB()在部分类的一个文件来实现,而MethodC()在另一个.
public partial class Condition : ICondition
{
public void MethodA(){ }
public void MethodB(){ }
}
Run Code Online (Sandbox Code Playgroud)
和我的类Condition.CompanyName.cs
public partial class Condition : ICondition
{
public void MethodC() { }
}
Run Code Online (Sandbox Code Playgroud)
这当然不起作用,因为接口必须在同一个文件中实现.我希望有一些声明,或者我不知道的一些语法魔法,这将允许我做我想做的事情,并将这些方法保存在单独的文件中,但是相同的接口.
这确实有效,我的问题是由于愚蠢的拼写错误,我在不同的命名空间中有了我的2个部分类.我想,今天早上我开始有点太早了,感谢大家的时间和关注.
我觉得我应该知道答案,但我不知道.
名为数字文字的类型字符是什么?
double myDouble = 12d;
float myFloat = 10f;
Run Code Online (Sandbox Code Playgroud)
我想今天找到一份完整的清单,但无法想出谷歌要搜索的内容.
如果有人有兴趣,找到一个体面的名单
http://www.undermyhat.org/blog/2009/08/secrets-and-lies-of-type-suffixes-in-c-and-vb-net/
我有一个域模型,由以下代表.
IMyInterface
ClassA : IMyInterface
ClassB : IMyInterface
Run Code Online (Sandbox Code Playgroud)
我想要的是以这样的方式实现IEquatable,我可以编写类似的代码.
if(dynamicallyCreatedInstanceOfClassA == dynamicallyCreatedinstanceOfClassB)
{
// Do something relevant
}
Run Code Online (Sandbox Code Playgroud)
我的第一个倾向是让IMyInterface实现IEquatable,但当然我实际上无法在IMyInterface中实现.我必须在ClassA和ClassB中这样做.这个解决方案让我觉得错误的是,ClassA和ClassB中IEquatable的实现将完全相同,行相同.有一种优雅的方式来实现这一目标吗?当ClassC出现时,我不想复制和过去50行重复的IEquatable代码.
我考虑使用抽象基类而不是接口,但在这种情况下,IMyInterface实际上只描述了类将执行的操作而不是类.ClassA和ClassB不共享许多相似之处,除非它们都可以执行IMyInterface合同中的操作.
任何见解都有帮助,谢谢你的时间.
我已经使用以下代码在类中实现了IEquatable接口.
public bool Equals(ClauseBE other)
{
if (this._id == other._id)
{
return true;
}
return false;
}
public override bool Equals(Object obj)
{
if (obj == null)
{
return base.Equals(obj);
}
if (!(obj is ClauseBE))
{
throw new InvalidCastException("The 'obj' argument is not a ClauseBE object.");
}
return Equals(obj as ClauseBE);
}
public override int GetHashCode()
{
return this._id.GetHashCode();
}
public static bool operator ==(ClauseBE a, ClauseBE b)
{
// cast to object so we call the overloaded Equals function …Run Code Online (Sandbox Code Playgroud) 我目前处于这样的情况:我有32位和64位开发人员机器在我的c#项目上工作.我必须引用一些同时具有32位和64位版本的dll.显然,32位机器需要引用32位dll,而64位机器需要64位dll.我遇到的问题是,每次开发人员检查一些代码时,他们也会检查他们的dll引用,所以当另一方的某个人提取他们的代码时,它不会构建,并且他们必须手动更新他们的引用他们应该是什么.然后他们检查,其他开发人员必须手动修复他们的引用等等.
我不认为这是一个新问题,但这是我第一次碰到它.有一个通常的做法是让项目自动引用CPU的正确dll吗?或者也许是一种拥有32位和64位项目的方法,每个项目都有正确的引用,以及一种方式(可能是命令行工具或一些可以绑定到构建中的外部工具)将它们绑定在一起,以便在新项目时添加或删除一个,另一个也将更新?
另一种选择是让每个开发人员使用相同的虚拟化开发环境.如果我走这条路线,我可以在32位硬件上虚拟化64位系统,还是我必须走另一条路,并虚拟化32位.这将是一个SaaS产品,所以我只需要部署一个处理器,我宁愿这是64位.
c# ×9
.net-3.5 ×1
32bit-64bit ×1
bitmask ×1
c#-2.0 ×1
class-design ×1
concurrency ×1
dll ×1
enums ×1
iequatable ×1
literals ×1
null ×1
nullable ×1
numbers ×1
open-source ×1
permissions ×1
sql ×1
syntax ×1
t-sql ×1
terminology ×1
types ×1