我有以下枚举:
public enum MyEnum
{
MyTrue,
MyFalse
}
Run Code Online (Sandbox Code Playgroud)
我希望最终能够自动将我的枚举转换为布尔值,使用如下简单的行:
MyEnum val = MyEnum.MyTrue;
bool IsThisTrue = val;
Run Code Online (Sandbox Code Playgroud)
目前,我必须这样做:
bool IsThisTrue = val == MyEnum.MyTrue;
Run Code Online (Sandbox Code Playgroud)
是否有一些机制可以应用于我的枚举以允许本机枚举 - > bool转换?我想知道是否需要或不使用某种类型的变换器.
谢谢
编辑: 我的自定义枚举有一个原因.由于这些属性最终都绑定到属性网格,因此我们有机制将所有自定义枚举绑定到资源文件中的多语言字符串.我们需要使用的所有枚举都在特定的命名空间中,因此需要"MyEnum"类.
我的公司正在努力将我们的开发从C++.net转移到C#.我们的产品具有标准的月度发布(例如,5.0.19.2 ...).
在C++ .net中,我们有一个常见的app.rc文件,它标准化了公司信息以及版本号.由于解决方案中的每个项目都包含相同的app.rc文件一次,因此很容易更改200多个项目的版本信息.
这个解决方案如何转化为C#世界?我在写这篇文章之前检查过的问题是通过解决方案资源管理器中的属性窗口提到的,但这不是我想要的.
我知道assemblyinfo.cs包含我想要修改的信息,但我认为我不能拥有一个主文件.我需要将其拆分为多个文件吗?
提前致谢!
我在WinForms(.net 3.5)中工作,并拥有以下代码行:
HitTestResult result;
try
{
result = this.HitTest( e.X, e.Y, ChartElementType.DataPoint);
}
catch(Exception e)
{
//This happens, we don't care!
}
Run Code Online (Sandbox Code Playgroud)
我无法控制HitTest是否会抛出异常,但如果确实如此,我绝对不在乎.
是否可以禁止我的IDE停止在此SPECIFIC catch块?我知道我可以禁用它可能抛出的System.FormatException(从Debug-> Exceptions菜单,但这有点矫枉过正.
谢谢!
我的C#winforms 4.0应用程序一直使用线程安全的编写器来执行内部调试日志信息.当我的应用程序打开时,它会删除该文件并重新创建它.当应用关闭时,它会保存文件.
我想要做的是修改我的应用程序,以便它可以附加而不是替换.这是一个简单的修复.
但是,这是我的问题:
我想保留我的日志文件AROUND 10兆字节.我的约束很简单.当您关闭文件时,如果文件大于10兆字节,则删除前10%.
是否有一种"更好"的方式,然后执行以下操作:
编辑:好吧,我最后滚动自己(如下所示)移动到Log4Net的建议是一个很好的建议,但是学习新库和移动所有日志语句(数千)的时间不是时间对我试图做的小改进有效.
private static void PerformFileTrim(string filename)
{
var FileSize = Convert.ToDecimal((new System.IO.FileInfo(filename)).Length);
if (FileSize > 5000000)
{
var file = File.ReadAllLines(filename).ToList();
var AmountToCull = (int)(file.Count * 0.33);
var trimmed = file.Skip(AmountToCull).ToList();
File.WriteAllLines(filename, trimmed);
}
}
Run Code Online (Sandbox Code Playgroud) 我正在使用C#4.0(winforms),调试具有10+个线程的应用程序.在调试时,有一个下拉列表来选择我应该调试哪个线程(只能在断点期间访问).
这些显示为"Win32线程","工作线程","RPC回调线程"等...
我喜欢在我的代码中命名它们.我正通过后台工作人员运行我的所有线程.
编辑:我的解决方案.这可能无法在100%的时间内起作用,但它确实能够满足需要.如果标签在某些情况下是错误的,那就可以在我正在使用的上下文中找到.
在每个backgroundworker的*_dowork事件中,我将以下代码行放入:
ReportData.TrySetCurrentThreadName(String.Format("{0}.{1}", MethodBase.GetCurrentMethod().DeclaringType, MethodBase.GetCurrentMethod().Name));
Run Code Online (Sandbox Code Playgroud)
哪个是......
public static void TrySetCurrentThreadName(String threadName)
{
if (System.Threading.Thread.CurrentThread.Name == null)
{
System.Threading.Thread.CurrentThread.Name = threadName;
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个应用程序需要接受数百万个char*作为输入参数(通常字符串小于512个字符(在unicode中)),并将它们转换并存储为.net字符串.
它结果是我的应用程序性能的真正瓶颈.我想知道是否有一些设计模式或想法使其更有效.
有一个关键部分让我觉得它可以改进:有很多重复.假设有100万个对象进入,可能只有50个独特的char*模式.
为了记录,这里是我用于将char*转换为字符串的算法(此算法在C++中,但项目的其余部分在C#中)
String ^StringTools::MbCharToStr ( const char *Source )
{
String ^str;
if( (Source == NULL) || (Source[0] == '\0') )
{
str = gcnew String("");
}
else
{
// Find the number of UTF-16 characters needed to hold the
// converted UTF-8 string, and allocate a buffer for them.
const size_t max_strsize = 2048;
int wstr_size = MultiByteToWideChar (CP_UTF8, 0L, Source, -1, NULL, 0);
if (wstr_size < max_strsize)
{
// Save the malloc/free overhead if it's a …Run Code Online (Sandbox Code Playgroud) 我有以下场景:我有一个枚举,并希望绑定它在DataGridViewTextBoxColumn上的DataGridView(数据绑定)中显示它.
这是我的枚举:
//[TypeConverter(typeof(EnumStringConverter))]
public enum YesNoNA
{
[EnumDescription("Yes")]
Yes,
[EnumDescription("No")]
No,
[EnumDescription("N/A")]
NA
}
Run Code Online (Sandbox Code Playgroud)
这是一个使用它的简单属性:
[TypeConverter(typeof(EnumStringConverter))]
public YesNoNA HighLimitWithinBounds { get; protected set; }
Run Code Online (Sandbox Code Playgroud)
在我上面的情况下,typeconverter工作正常.它为我做了转换.
但是,这比我理想的解决方案更复杂.如果我将typeconverter放在Enum本身(取消注释上面的代码),并在属性上注释掉typeconverter,则不再调用typeconverter!
我已经在其他类上完成了这个约定,它运行得很好.
为什么直接在枚举上放置一个typeconverter不起作用?
作为参考,这是我的typeconverter:
public class EnumStringConverter : TypeConverter
{
public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, Object value, Type destinationType)
{
if (value != null && destinationType == typeof(string))
{
return "Edited to protect the innocent!";
}
return TypeDescriptor.GetConverter(typeof(Enum)).ConvertTo(context, culture, value, destinationType);
}
public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
{
if (destinationType == …Run Code Online (Sandbox Code Playgroud) 我有两个字符串(它们最终将在一个简单的数据库中描述),让我们说它们是
我正在寻找的是这个.我想要一个输入"cocnut"的函数,输出为"String A"
我们可能在资本化方面存在差异,拼写并不总是存在.如果你愿意的话,目标是"快速而肮脏"的搜索.
是否有任何.net(或第三方),或为字符串推荐'相似算法',所以我可以检查输入是否有"非常接近的片段"并返回它?我的数据库将有50个条目,顶部.
我目前正在开发一个应用程序,我想在上下文菜单中显示UserControl.我能够(使用ToolStripControlHost实现这一点).显示在(NumericUpDownToolStripItem代码)中:下面是对象的代码(用VC++.net 2.0编写).注意:在这方面存在半类似的SO问题,但似乎没有一个问题涉及序列化用户控件,只是处理用户控件中的标准对象.
在对象后面显示的是实际usercontrol的代码,它是带有标签的usercontrol和numericupdown控件.
问题:当我为我的应用程序加载设计器时,我可以添加我的NumericUpDownToolStripItem就好了,但是,当我打开使用外露属性来编辑我的usercontrol时,没有任何数据被序列化到我的NumericUpDownToolStripItem对象的InitializeComponent方法中.这样做的结果是我的控件加载与运行时的所有默认值.每次我重新加载表单时,修改都会丢失.
我已经使用位于TypeConverter的教程尝试在MSDN上,但它并没有正常工作.一切都编译得很好,除了我的对象在设计网格中变得完全灰暗(只是访问者属性,而不是整个menupic).我注意到的另一个问题是这个方法并不是专为UserControls设计的,它可能有几个不同的可修改属性,并且每个都不可能有重载.
所以,我有以下问题:
提前致谢.我将继续研究这个并保持更新的问题.
NumericUpDownToolStripItem Class:
[ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability::All)]
public ref class NumericUpDownToolStripItem : public ToolStripControlHost
{
public:
[DesignerSerializationVisibility(DesignerSerializationVisibility::Content |
DesignerSerializationVisibility::Visible)]
property LabeledNumericUpDown ^LabeledNumericUpDownControl
{
LabeledNumericUpDown ^get() { return (LabeledNumericUpDown^)this->Control; }
}
public: NumericUpDownToolStripItem(void) :
ToolStripControlHost(gcnew LabeledNumericUpDown()) {}
protected: void OnSubscribeControlEvents(Control ^control) new { //irrelevant to question }
protected: void OnUnsubscribeControlEvents(Control ^control) new { //irrelevant to question }
};
public ref class LabeledNumericUpDown : public UserControl
{
public: [ DesignerSerializationVisibility(DesignerSerializationVisibility::Content |
DesignerSerializationVisibility::Visible)]
property String …Run Code Online (Sandbox Code Playgroud) 我遇到了以下问题:我有一个带有约束的泛型类,它派生自非泛型接口:
public abstract class DrilldownBase<W> where W : class, IDrilldown
Run Code Online (Sandbox Code Playgroud)
这段代码不正确,因为它认为IDrilldown是一个约束,当它的NOT.我想要的是DrilldownBase类从IDrilldown继承.我错过了什么?
谢谢.
c# ×10
.net ×6
winforms ×3
algorithm ×2
debugging ×2
enums ×2
c++-cli ×1
casting ×1
constraints ×1
datagridview ×1
exception ×1
file-io ×1
generics ×1
ide ×1
logging ×1
performance ×1
sql-like ×1
streamwriter ×1
string ×1
try-catch ×1
version ×1
versioning ×1