为了使用十进制数据类型,我必须使用变量初始化来执行此操作:
decimal aValue = 50.0M;
Run Code Online (Sandbox Code Playgroud)
M部分代表什么?
我必须在Oracle DB中执行一些插入操作.我有以下格式的日期
'23.12.2011 13:01:001'
Run Code Online (Sandbox Code Playgroud)
根据我编写的文档,插入to_date如下:
to_date('23.12.2011 13:01:01', 'DD.MM.YYYY HH24:MI:SS')
Run Code Online (Sandbox Code Playgroud)
哪个工作正常.现在我的格式日期为毫秒
'23.12.2011 13:01:001'
Run Code Online (Sandbox Code Playgroud)
我尝试过以下方法:
to_date('23.12.2011 13:01:001', 'DD.MM.YYYY HH24:MI:SSFF3')
Run Code Online (Sandbox Code Playgroud)
这是不正确的(传递错误01821. 00000 - "日期格式无法识别").
我应该使用哪个"字符串"这种格式,用毫秒?
提前致谢!
请解释"爬山"和"贪婪"算法之间的区别.
看起来两者都很相似,我怀疑"爬山"是一种算法; 这似乎是一种优化.它是否正确?
这有点啰嗦,所以这是快速版本:
为什么这会导致运行时TypeLoadException?(并且编译器是否应该阻止我这样做?)
interface I
{
void Foo<T>();
}
class C<T1>
{
public void Foo<T2>() where T2 : T1 { }
}
class D : C<System.Object>, I { }
Run Code Online (Sandbox Code Playgroud)
如果您尝试实例化D,则会发生异常.
更长,更具探索性的版本:
考虑:
interface I
{
void Foo<T>();
}
class C<T1>
{
public void Foo<T2>() where T2 : T1 { }
}
class some_other_class { }
class D : C<some_other_class>, I { } // compiler error CS0425
Run Code Online (Sandbox Code Playgroud)
这是非法的,因为类型约束C.Foo()与那些不匹配I.Foo().它会生成编译器错误CS0425.
但我想我可能会违反规则:
class D : C<System.Object>, I { } // …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我正在使用此处说明的用户设置.然后我意识到在VS 2010中我使用的是.NET 4.0,而只有.NET 2.0就足够了.
当我更改框架并构建项目时,每当我现在访问设置时,在我的代码中,我收到以下错误:
为userSettings/Vegi_Manager.Properties.Settings创建配置节处理程序时出错:无法加载文件或程序集'System,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'或其依赖项之一.该系统找不到指定的文件.(C:\ Users\AKSHAY\AppData\Local\Microsoft\Vegi-Manager.vshost.exe_Url_44035dlkzpfaaauiqsd4nh3f0l0yq0tv\1.0.0.0\user.config第5行)
这是使用4.0版的未知原因.请建议我该怎么做.
想象一下这个字符串:
_ _ _ _ _ _ _
| _| _||_||_ |_ ||_||_|
||_ _| | _||_| ||_| _|
Run Code Online (Sandbox Code Playgroud)
分割这个字符串最简单/最好的方法是什么,这样每个数字都可以自己处理?
我在想类似的东西
public string[] SplitIntoNumbers(string input)
Run Code Online (Sandbox Code Playgroud)
结果会是什么样的
[" | |", " _ _||_ ", " _ _| _|", ...]
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
编辑
因为想要更多信息 - 问题来自于BankOCR -kata over CodingDojo.我意识到有多种方法可以"完成工作" - 解决方案,但我觉得必须有一种更''花哨'的解决方法.一些类似于clojure的东西.
我有一个简单的usercontrol(WinForms)与一些公共属性.当我使用此控件时,我想数据绑定到DataSourceUpdateMode设置为OnPropertyChanged的那些属性.数据源是一个实现INotifyPropertyChanged的类.
我知道需要为属性创建绑定,我正在这样做.
我假设我的usercontrol必须实现一个接口,或者属性需要用某些属性进行修饰,或者沿着那些行进行修饰.但是我的研究空白了.
该如何实现?目前,我正在通过在属性更改时在我的usercontrol中调用OnValidating()来实现它,但这似乎不对.
如果我在用户控件上将CausesValidation设置为true,我可以进行验证,但这对我来说不是很有用.我需要验证每个子属性的变化.
请注意,这是WinForms的情况.
编辑:显然我没有解释的天赋,所以希望这将澄清我在做什么.这是一个简短的例子:
// I have a user control
public class MyControl : UserControl
{
// I'm binding to this property
public string ControlProperty { get; set; }
public void DoSomething()
{
// when the property value changes, the change should immediately be applied
// to the bound datasource
ControlProperty = "new value";
// This is how I make it work, but it seems wrong
OnValidating();
}
}
// the class …Run Code Online (Sandbox Code Playgroud) 我一直在写我的人抽象类的名字属性的支票.我的问题是,我试图实现一段代码,不允许用户将字段留空或超过35个字符的名称限制或输入数字,但我坚持使用它.如果有人可以帮助或建议我.
public string Name
{
get { return name; }
set
{
while (true)
{
if (value == "" || value.Length > 35)
{
Console.Write("Please Enter Correct Name: ");
value = Console.ReadLine();
continue;
}
foreach (char item in value)
{
if (char.IsDigit(item))
{
Console.Write("Digits Are NotAllowed....\n");
Console.Write("Please Enter Correct Name: ");
value = Console.ReadLine();
break;
}
}
break;
}
name = value;
}
}
Run Code Online (Sandbox Code Playgroud) 我在MSDN杂志的这篇文章中,作者陈述(强调我的):
请注意,装箱始终会创建一个新对象,并将未装箱的值的位复制到该对象.另一方面,取消装箱只返回指向盒装对象内数据的指针:不会发生内存复制.但是,通常情况下,您的代码将导致未装箱引用指向的数据被复制.
我对我加粗的句子和随后的句子感到困惑.从我读过的其他内容,包括这个MSDN页面,我以前从未听说过取消装箱只返回指向堆上值的指针.我的印象是,拆箱会导致你有一个包含堆栈值的副本的变量,就像你开始一样.毕竟,如果我的变量包含"指向堆上的值的指针",那么我没有值类型,我有一个指针.
有人可以解释这意味着什么吗?作者是破解?(文章中至少还有一个明显的错误).如果这是真的,那么"您的代码将导致未装箱的引用指向的数据无论如何都被复制"的情况是什么?
我刚刚注意到这篇文章已经有近10年的历史了,所以也许这在.Net的生命中很早就发生了变化.
关于多线程编程似乎有很多东西需要学习,而且它有点令人生畏.
对于我目前的需求,我只想防止在完成之前从另一个线程再次调用的方法,我的问题是:
这是一种使方法线程安全的充分(安全)方法吗?
class Foo
{
bool doingWork;
void DoWork()
{
if (doingWork) // <- sophistocated thread-safety
return; // <-
doingWork = true;
try
{
[do work here]
}
finally
{
doingWork = false;
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果这还不够,最简单的方法是什么?
编辑:有关场景的更多信息:
Foo只有一个例子
将在System.Timers.Timer的Elapsed事件上从ThreadPool线程调用Foo.DoWork().
通常Foo.DoWork()会在下次调用之前完成eons,但是我想编码它运行时间很长的机会,并在完成之前再次调用.
(我也不够聪明,不能确定这个问题是否可以被标记为与语言无关,所以我没有.开明的读者,如果适用,请随意这样做.)
c# ×6
.net ×4
algorithm ×1
app-config ×1
boxing ×1
clr ×1
compiler-bug ×1
data-binding ×1
decimal ×1
generics ×1
literals ×1
oracle ×1
reentrancy ×1
runtime ×1
split ×1
string ×1
to-date ×1
unboxing ×1
validation ×1
winforms ×1