当你拥有的是一对断线钳和一瓶伏特加酒时,一切看起来就像是Wolf Blitzer船库门上的锁.(如果你不读xkcd,用锤子和钉子代替)
我目前正在编写Clojure,Python,Java和PHP,所以我熟悉C和LISP语法以及空白事物.我知道命令式,功能性,不可变性,OOP和几种类型的系统和其他东西.现在我想要更多!
什么是采用不同方法的语言,对实际工具选择或理论理解有用?
我不想学习另一种函数式语言(Haskell)或其他命令式OOP语言(Ruby),也不想练习像Brainfuck这样不切实际的有趣语言.
我发现自己的一个非常有趣的事情是基于单声道堆栈的语言,如Factor.
只有当我觉得我理解了大多数概念并对我的所有问题都有答案时,我才想开始考虑我自己的玩具语言,以包含我所有的个人喜好.
我喜欢CoffeeScript编译==成JavaScript ===运算符.但是如果你想要原始的JS ==语义怎么办?他们有空吗?我仔细阅读了文档,找不到任何能够实现此功能的内容.
更一般地说,有没有办法将普通的JS内联到我的CoffeeScript代码中,以便编译器不会触及它?
我宁愿避免编辑已编译的JavaScript输出,因为我正在使用Chirpy在Visual Studio中自动生成它.
我有一个必需的字段验证器和自定义验证器来验证texbox.必需的字段验证器完全触发.我无法正确启动自定义验证器?
<asp:TextBox ID="txtPRI" runat="server" Width="295" /><br />
<asp:RequiredFieldValidator display="Dynamic" CssClass="leftAlign" SetFocusOnError="true" runat="server" controltovalidate="txtPRI" errormessage="Please enter your PRI" />
<asp:CustomValidator runat="server" id="cusCustom" controltovalidate="txtPRI" onservervalidate="cusCustom_ServerValidate" Enabled="true" ValidateEmptyText="true" display="Dynamic" CssClass="leftAlign" SetFocusOnError="true" errormessage="The text must be exactly 8 characters long!" />
Run Code Online (Sandbox Code Playgroud)
代码背后
protected void cusCustom_ServerValidate(object sender, ServerValidateEventArgs e)
{
Response.Write("firing - test");
Response.End();
if (e.Value.Length == 8)
e.IsValid = true;
else
e.IsValid = false;
}
Run Code Online (Sandbox Code Playgroud) 我正在做遗留应用程序的一些工作,而我的VB6技能并不是那么好.我需要检查String字段是否已初始化并设置为null/nothing或空字符串以外的其他字符串.在C#中,我只是做了类似的事情:
if (string.IsNullOrEmpty(myObj.Str))
Run Code Online (Sandbox Code Playgroud)
我不确定在VB6中它的等价物是什么,而且我对使用If myObj.Str = ""它并将其称为好而感到紧张.这样做的正确方法是什么?
为了澄清,如果满足以下任何条件,我希望返回True:
该字段最初为Long,我正在替换的代码检查它是否设置为0.
我正在尝试使用Microsoft.Office.Interop.Excel命名空间打开Excel文件(XSL或CSV,但遗憾的是不是 XSLX)并将其导入DataSet.我无法控制工作表或列名,因此我需要允许对它们进行更改.
我以前尝试过这种OLEDB方法,并且遇到了很多问题(错误,速度慢,并且需要事先了解Excel文件的架构),所以我想避免再次这样做.我想要做的是使用Microsoft.Office.Interop.Excel将工作簿直接导入DataSet,或者循环遍历工作表并将每个工作表加载到DataTable中.
信不信由你,我很难找到资源.在StackOverflow上进行的一些搜索发现大多数人都试图进行反向(DataSet => Excel)或OLEDB技术.谷歌没有多大帮助.
public void Load(string filename, Excel.XlFileFormat format = Excel.XlFileFormat.xlCSV)
{
app = new Excel.Application();
book = app.Workbooks.Open(Filename: filename, Format: format);
DataSet ds = new DataSet();
foreach (Excel.Worksheet sheet in book.Sheets)
{
DataTable dt = new DataTable(sheet.Name);
ds.Tables.Add(dt);
//??? Fill dt from sheet
}
this.Data = ds;
}
Run Code Online (Sandbox Code Playgroud)
我可以一次导入整本书,或者一次循环一张.我可以使用Interop.Excel执行此操作吗?
假设我有一个表达式,它只是一个成员访问运算符链:
Expression<Func<Tx, Tbaz>> e = x => x.foo.bar.baz;
Run Code Online (Sandbox Code Playgroud)
您可以将此表达式视为子表达式的组合,每个子表达式包含一个成员访问操作:
Expression<Func<Tx, Tfoo>> e1 = (Tx x) => x.foo;
Expression<Func<Tfoo, Tbar>> e2 = (Tfoo foo) => foo.bar;
Expression<Func<Tbar, Tbaz>> e3 = (Tbar bar) => bar.baz;
Run Code Online (Sandbox Code Playgroud)
我想要做的是分解e成这些组件子表达式,以便我可以单独使用它们.
如果我有表达x => x.foo.bar,我已经知道如何中断x => x.foo.如何拉出其他子表达式foo => foo.bar?
我试图在C#中模拟"提升"成员访问操作符,就像CoffeeScript的存在访问操作符一样?..Eric Lippert表示,类似的运营商被考虑用于C#,但没有预算来实施它.
如果这样的运算符存在于C#中,您可以执行以下操作:
value = target?.foo?.bar?.baz;
Run Code Online (Sandbox Code Playgroud)
如果target.foo.bar.baz链的任何部分结果为null,那么整个事情将评估为null,从而避免NullReferenceException.
我想要一个Lift可以模拟这种事情的扩展方法:
value = target.Lift(x => x.foo.bar.baz); //returns target.foo.bar.baz or null
Run Code Online (Sandbox Code Playgroud)
我有以下代码
@foreach (var item in Model.Defaults)
{
<tr class="CertainCategory">
<td>
@item.Item1
</td>
<td>
@Html.CheckBoxFor(c => c.Use)
@Html.Hidden("guid", guid.guid.ToString())
</td>
</tr>
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用AJAX向控制器方法提交表单值.我的问题是复选框的值总是发送为true.
$('.CropUsageItem').each(function () {
var guid = $(this).find("#guid").val();
var chk = $(this).find("#use").val();
var data = {
guid: guid,
chk: chk
};
$.ajax({
async: false,
type: "POST",
url: "DefaultValues/SaveDefault",
data: data
});
});
Run Code Online (Sandbox Code Playgroud)
我搜索过类似结果的StackOverflow,但没有一个完全适用于我的场景.我该如何发送正确的值?
如何实现结构以便执行以下转换?
var a = new StatusedValue<double>(1, false);
var b = (StatusedValue<int>)a;
Run Code Online (Sandbox Code Playgroud)
我的实现应该表现得相似Nullable<T>,哪种方式正常.但是,此代码失败System.InvalidCastException:
public struct StatusedValue<T> where T : struct
{
public StatusedValue(T value) : this(value, true)
{
}
public StatusedValue(T value, bool isValid)
{
this.value = value;
this.isValid = isValid;
}
private T value;
private bool isValid;
public static implicit operator StatusedValue<T>(T value)
{
return new StatusedValue<T>(value);
}
public static explicit operator T(StatusedValue<T> value)
{
return value.value;
}
}
Run Code Online (Sandbox Code Playgroud)
结果:
无法将"StatusedValue`1 [System.Double]"类型的对象强制转换为"StatusedValue`1 [System.Int32]".
如果我要调用的方法/函数需要一个开放的SqlConnection,我将在调用该函数的方法中打开它.例如:
protected static void btnSubmit(){
conn.Open();
myMethod(someParam, conn);
conn.Close();
}
protected static void myMethod(object someParam, SqlConnection conn){
//Some SQL commands etc here..
}
Run Code Online (Sandbox Code Playgroud)
我这样做,所以我:
但是,如此构造我的代码会更好:
protected static void btnSubmit(){
myMethod(someParam);
}
protected static void myMethod(object someParam){
SqlConnection conn = New SqlConnection(".....");
conn.Open();
//Some SQL commands etc here..
conn.Close();
}
Run Code Online (Sandbox Code Playgroud)
我看到以这种方式构造它的优点是:
我看到的缺点是:
myMethod是一个递归方法,那么当它自己调用它将打开另一个SqlConnection,依此类推,等等.btnSubmit正在调用所有需要SqlConnection的多个方法,则每个方法都将打开并关闭新连接.这样做的最佳方法是什么,哪种方式最常用?
将值类型传递给方法的out参数会导致变量的装箱/取消装箱(从而导致性能下降)吗?编译器可以优化它吗?
int number;
bool result = Int32.TryParse(value, out number);
Run Code Online (Sandbox Code Playgroud) c# ×6
asp.net ×1
asp.net-mvc ×1
boxing ×1
casting ×1
checkbox ×1
coffeescript ×1
dataset ×1
excel ×1
generics ×1
interop ×1
javascript ×1
jquery ×1
lambda ×1
lifting ×1
performance ×1
string ×1
struct ×1
unboxing ×1
validation ×1
vb6 ×1