在C#编程语言中, Bill Wagner说:
许多人将动态绑定与类型推断混淆.类型推断是静态绑定的.编译器在编译时确定类型.例如:
Run Code Online (Sandbox Code Playgroud)var i = 5; //i is an int (Compiler performs type inference) Console.WriteLine(i); //Static binding to Console.WriteLine(int)编译器推断i是一个整数.对变量i的所有绑定都使用静态绑定.
现在,根据这些信息和我自己制作的动态场景:
dynamic i = 5; //Compiler punts
Console.WriteLine(i);//This is now dynamically bound
Run Code Online (Sandbox Code Playgroud)
我们知道类型推断是静态约束的.这意味着动态变量无法使用类型推断来确定类型.如何在不使用类型推断的情况下解析动态类型?
更新
要尝试澄清......在运行时我们必须弄清楚我的类型是什么?因为我分配了一个文字,5然后运行时可以推断出它i是一个int.是不是那种类型推断而不是动态绑定?
鉴于:
object literal1 = "abc";
object literal2 = "abc";
object copiedVariable = string.Copy((string)literal1);
if (literal1 == literal2)
Console.WriteLine("objects are equal because of interning");//Are equal
if(literal1 == copiedVariable)
Console.WriteLine("copy is equal");
else
Console.WriteLine("copy not eq");//NOT equal
Run Code Online (Sandbox Code Playgroud)
这些结果意味着copiedVariable不受字符串实习的影响.为什么?
是否存在这样的情况:对于没有实习的等效字符串是有用的还是由于某些语言细节而导致的这种行为?
鉴于代码:
string p = @"C:\Users\Brian";
string p2 = @"\bin\Debug";
string result = Path.Combine(p, p2);//result: \bin\Debug
Console.WriteLine(result);
Run Code Online (Sandbox Code Playgroud)
我希望看到以下结果:
C:\Users\Brian\bin\Debug
Run Code Online (Sandbox Code Playgroud)
但结果是
\bin\Debug
Run Code Online (Sandbox Code Playgroud)
如果我初始化 p2 = @"bin\Debug";
然后结果如预期.看看MSDN,这似乎按设计工作:
如果path2不包含根(例如,如果path2不以分隔符或驱动器规范开头),则结果是两个路径的串联,以及插入的分隔符.如果path2包含根,则返回path2.
IMO,在.NET中排除\作为根更有意义.AFAIK,这不是任何Windows操作系统上的有效根(\\可以).然后,我可以组合部分路径,而不用担心部分路径是否以a开头\.
为什么这种方法设计为考虑单个\根?
我正在使用ApiController.我很难理解为什么ApiControllers在某些方面与控制器不同.
采取
public class QuestionCommentController : ApiController
{
QuestionCommentCRUD crud = new QuestionCommentCRUD();
// GET api/questioncomment/5
[HttpGet]
public string Read(int id)
Run Code Online (Sandbox Code Playgroud)
我习惯于Controller允许我创建方法而不通过Attributes指定合法动词的类型:
public class QuestionCommentController : Controller
{
QuestionCommentCRUD crud = new QuestionCommentCRUD();
// GET questioncomment/5
public string Read(int id)
Run Code Online (Sandbox Code Playgroud)
在后一种情况下,我可以在不指定的情况下执行GET/POST HttpGetAttribute.我发现这种行为令人困惑,原因如下:
HttpGet:System.Web.Http.HttpGet和System.Web.Mvc.HttpGetSystem.Web.Http.HttpGe需要T,System.Web.Mvc.HttpGet是不是需要GET请求ApiController 请求需要一条独特的路线 /api/controller...Controller让我陷入成功之中.较新的ApiController需要手持.
我注意到默认模板有一个我不理解的语法:
public void Post([FromBody]string value)
{
}
Run Code Online (Sandbox Code Playgroud)
动词是方法名称,还有一些时髦的[FromBody]东西.也许这就是为什么这样设置的原因?ApiController对于这种设计的使用存在哪些假设导致了这种设计?
鉴于:
public ActionResult List()
{
using (var unitOfWork = new UnitOfWork())
{
var result = unitOfWork.Repository.Find<EntityAddress>(a => a.PostalCode == "80001");
//return View(result.ToList());//NO Exception raised with ToList()
return View(result);//EXCEPTION RAISED IN VIEW DURING ITERATION
}
}
Run Code Online (Sandbox Code Playgroud)
UnitOfWork是一次性的,处理我的DbContext.它还禁用构造函数中的延迟加载:
public UnitOfWork()
{
_dbContext.Configuration.LazyLoadingEnabled = false;
Repository = new GenericRepository<MyEntities>(_dbContext);
}
public void Dispose()
{
Repository.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
而Find<EntityAddress>()实施工程以:
_dbContext.Set<EntityAddress>().Where(predicate) 其中谓词是类型的参数 Expression<Func<EntityAddress, bool>>
为什么即使在禁用延迟加载后也会出现处理异常?
我运行这个命令:
webpack-dev-server --content-base deployment/deployment --hot --inline
这正确地启动了我的网站.然后我更新randomFile.js了错误的语法(插入"abc"),这应该导致lint错误或某种失败.当我保存randomFile.jswebpack报告"webpack:bundle现在有效"并显示我修改的文件以及另外两个文件(dunno为什么其他2个存在).Webpack还报告发出"bundle.js"和"guid.hot-update.json".
该网站不会更新.
我检查了时间戳
deployment/deployment/js/bundle.js
它还没有更新.
var path = require('path')
var webpack = require('webpack')
var HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
devtool: 'eval',
entry: [
'webpack-hot-middleware/client',
'./src/main.js'
],
output: {
path: path.join(__dirname, 'deployment/deployment/js'),
filename: 'bundle.js',
publicPath: '/'
},
plugins: [
new webpack.optimize.OccurenceOrderPlugin(),
new webpack.HotModuleReplacementPlugin(),
new webpack.NoErrorsPlugin()
],
module: {
loaders: [{
test: /\.jpg/,
loader: 'file'
}, {
test: /\.css$/,
loaders: [
'style?sourceMap',
'css?modules&importLoaders=1&localIdentName=[path]___[name]__[local]___[hash:base64:5]'
]}, {
test: /\.scss$/,
loaders: [
'style?sourceMap', …Run Code Online (Sandbox Code Playgroud) 我有一个创建PDF的过程.我希望这些PDF是暂时的和短暂的.我希望能够在用户单击按钮时执行以下操作:
string CreatePDF()//returns fileName.pdf
PromptUserToDownloadPDF()
DeletePDF(fileName.pdf)
Run Code Online (Sandbox Code Playgroud)
我想避免必须创建一个清理程序,并处理用户在运行清理时同时创建PDF的任何竞争条件.
在winforms中,我会同步提示用户下载文件.我怎样才能在网上做类似的任务?
更新
请注意,我正在使用第三方应用程序来创建PDF(Apache FOP).基本上我(将)有一个调用命令行的函数:
C:> fop"inputfile""output.pdf"
所以,在记忆中不是一种选择......除非我能以某种方式做到......
string CreatePDF()//returns fileName.pdf
string RecreatePDFInMemory()
DeletePDF(fileName.pdf)
PromptUserToDownloadPDF()
Run Code Online (Sandbox Code Playgroud) 我明白了
Quattrode®
Run Code Online (Sandbox Code Playgroud)
从HTML编码为的字符串
Quattrode®
Run Code Online (Sandbox Code Playgroud)
在Excel 2007中查看时.
常规
Response.Clear();
Response.Buffer = true;
Response.ContentType = "text/comma-separated-values";
Response.AddHeader("Content-Disposition", "attachment;filename=\"Expired.csv\"");
Response.RedirectLocation = "export.csv";
Response.Charset = "";
//Response.Charset = "UTF-8";//this does not work either.
EnableViewState = false;
ExportUtility util = new ExportUtility();
Response.Write(util.DataGridToCSV(gridViewExport, ","));
Run Code Online (Sandbox Code Playgroud)
基本上DataGridToCSV()使用 HttpUtility.HtmlDecode(stringBuilder.ToString());,我可以使用visual studio的文本可视化工具,看看字符串看起来正确(Quattrode®).
因此,Response过程或Excel对文件的解释中的某些内容不正确.知道怎么解决?
如何用Razor写下以下声明?
@{
if (isOddRow)
{
<tr class="PadColumns">
}
else
{
<tr class="PadColumns AlternateRow">
}
//then...
<td>content</td>
</tr>
}
Run Code Online (Sandbox Code Playgroud)
Razor生气,Intellisense破产.
所以我想我的包裹tr's在<text>
if (isOddRow)
{
<text><tr class="PadColumns"></text>
}
Run Code Online (Sandbox Code Playgroud)
...导致运行时解析器错误tr,没有匹配的开始标记.
我想避免申请DRY
if (isOddRow)
{
<tr class="PadColumns">
//then...
<td>content</td>
</tr>
}
else
{
<tr class="PadColumns AlternateRow">
//then...
<td>content</td>
</tr>
}
Run Code Online (Sandbox Code Playgroud)