如何获得提供给闭合/构造的泛型方法的参数值?
我已经有一段时间没有触及反射.所有这些都曾经在我的后面,嗯,无论如何.
class Program
{
static void Main(string[] args)
{
new ConcreteFoo().GenericMethod<int>(5);
Console.ReadKey();
}
}
class ConcreteFoo
{
public void GenericMethod<Q>(Q q)
{
var method = MethodInfo.GetCurrentMethod();
var parameters = method.GetParameters();
if (parameters.Length > 0)
foreach (var p in parameters)
Console.WriteLine("Type: {0}", p.ParameterType);
// That still prints Q as the type.
// I've tried GetGenericArguments as well. No luck.
// I want to know:
// 1) The closed type, i.e. the actual generic argument supplied by the caller; and
// …Run Code Online (Sandbox Code Playgroud) 我有一个名为的模型类Foo,其中包括这些属性.
public string StripeRecipientId { get; set; }
public override bool HasProvidedBillingInformation
{
get
{
// return !string.IsNullOrEmpty(this.StripeRecipientId);
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
我启用了迁移并且正在使用Code First.当我运行update-database命令行开关时,是否-Force指定了选项,我收到此错误:
Column names in each table must be unique.
Column name 'StripeRecipientId' in table
'dbo.Foos' is specified more than once.
我进行了双重检查和三重检查,在我的模型和表格中只有一列该名称.这个专栏已经由前一次运行的update-database命令行开关创建了.
我很想删除我的数据库然后应用迁移,但这意味着我必须创建大量的测试数据才能测试我刚才正在处理的功能.
我正在使用Entity Framework v6.1.2.
我该如何摆脱这个错误?
来自Jon Skeet的精彩书籍C#In Depth,First Edition:
class Film
{
public string Name { get; set; }
public int Year { get; set; }
public override string ToString()
{
return string.Format("Name={0}, Year={1}", Name, Year);
}
}
var films = new List<Film>
{
new Film {Name="Jaws", Year=1975},
new Film {Name="Singing in the Rain", Year=1952},
new Film {Name="Some Like It Hot", Year=1959},
new Film {Name="The Wizard of Oz", Year=1939},
new Film {Name="It's a Wonderful Life", Year=1946},
new Film {Name="American Beauty", Year=1999},
new Film …Run Code Online (Sandbox Code Playgroud) 假设你为下面的代码编写了一个自定义枚举器:
public class School : IEnumerable<Student>
Run Code Online (Sandbox Code Playgroud)
然后在客户端代码中,您执行了以下操作:
static void Main(string[] args)
{
var school = CreateSchoolWithStudents();
var query = from student in school
where student.Name.StartsWith("S")
select student;
Debugger.Break();
}
private static School CreateSchoolWithStudents()
{
return new School
{
new Student { Name = "Sathyaish" },
new Student { Name = "John" },
new Student { Name = "Carol" },
new Student { Name = "Peter" }
};
}
Run Code Online (Sandbox Code Playgroud)
然后,在类的MoveNext方法实现上设置一个断点StudentEnumerator.
然后,当您运行代码并且在构造查询/ IEnumerable之后调试器中断,并且您Results View在下面显示的图片中展开了类似内容时,Visual Studio如何评估序列而不会破坏其枚举器MoveNext …
我一直在寻找加密JS和其编码转换和从WordArray。我查阅了文档,找不到任何关于 aWordArray可能是什么的解释。
据我所知,在 JavaScript 中甚至没有一个名为的类型化数组WordArray,并且DataView在任何具有该名称的类型化数组中也没有。
我知道WORDVisual C++ 中的a是什么,但我不确定它在这里是什么意思。
奇怪的是,我在crypto-js上发现的所有线程(这里、这里和这里)都在使用这个词,而没有人真正问它是什么。WordArray
真的有人能告诉我吗?是Uint16Array吗?或者只是普通字节数组(Uint8Array或无类型 Array整数值)的另一个花哨词?
以下评论意味着什么?
// The line below only works when linked rather than
// referenced, as otherwise you need a cast.
// The compiler treats it as if it both takes and
// returns a dynamic value.
string value = com.MakeMeDynamic(10);
Run Code Online (Sandbox Code Playgroud)
我理解引用程序集的内容.您可以在命令行使用/ ref:开关编译程序文件时引用它,也可以在Visual Studio中向程序集添加静态引用.
但是如何链接到.NET中的程序集?他的意思是,使用Reflection(Assembly.LoadFile())加载程序集?或者,Win32 API LoadLibrary()?或者,.NET是否有我从未听说过的链接器?
当您的应用程序中有图像标记时,如下所示:
<img src = @Url.Content("~/foo/bar.jpg") />
Run Code Online (Sandbox Code Playgroud)
或者像这样:
<asp:image src = "~/foo/bar.jpg" />
Run Code Online (Sandbox Code Playgroud)
或者像这样:
<input type = "image" ...>
Run Code Online (Sandbox Code Playgroud)
如果这恰好是一个ASP.NET应用程序(Web窗体或MVC与问题无关,我认为,因为提供图像的代码必须相同),哪个特定组件服务于图像请求?
它是Web服务器(IIS或Visual Studio的内部Web服务器)还是Microsoft编写的ASP.NET HttpHandler.
我记得曾经有一个处理器用于在ASP.NET 2.0中提供资源文件.这也是提供图像的那个吗?它叫什么?
我为什么要问这个问题/我想做什么
我有一个ASP.NET MVC应用程序,我想编写自己的自定义HttpHandler或Controller来提供静态资产,如图像,以便它们被缓存.
我打算做什么几乎完全类似于http://blog.hompus.nl/2011/03/11/make-your-browser-cache-the-output-of-an-httphandler/和http:/ /archive.msdn.microsoft.com/ResourceCache
我想确保如果有一个已经由Microsoft编写,我可能需要采取一些预防措施,同时在响应中发回Http标头,以便Microsoft的内置httpHandler集合的标题与我设置的标题不相符.
我正在进行这个简单的异步调用.我想跟随调用DownloadDataTaskAsync方法并逐步进入Microsoft .NET框架源代码.
using System;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace WhereIsTheTaskSchedulerHere
{
class Program
{
static void Main(string[] args)
{
var task = GetData("http://sathyaish.net");
var buffer = task.Result;
var data = Encoding.ASCII.GetString(buffer);
Console.WriteLine(data);
Console.WriteLine("\nPress any key to continue...");
Console.ReadKey();
}
async static Task<byte[]> GetData(string url)
{
var client = new WebClient();
var data = await client.DownloadDataTaskAsync(url);
return data;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在Reflector中跟踪调用,直到代码调用System.Net.WebClient.DownloadBits方法为止.如果调用是异步执行的,则此方法通过调用类上的异步编程模型(APM)方法进一步调度线程池线程BeginGetResponse上的工作System.Net.WebRequest.
这是DownloadBitsReflector 的方法代码.
private byte[] DownloadBits(WebRequest request, Stream …Run Code Online (Sandbox Code Playgroud) .net c# visual-studio visual-studio-debugging visual-studio-2015
创建具有Entity Framework模型和对象上下文的类库.然后向解决方案添加新的控制台应用程序.从控制台应用程序,引用具有您的模型的项目.
现在在控制台应用中输入:
static void Main(string[] args)
{
using (var context = new ExperimentalDbContext())
{
}
Console.ReadKey();
}
Run Code Online (Sandbox Code Playgroud)
在构建时,您将收到报告错误:
"System.Data.Entity.DbContext"类型在未引用的程序集中定义.你必须添加对程序集EntityFramework的引用... yada yada yada ...
现在,我在过去几年中已经多次这样做了,但每当我收到此错误时,我再一次无助地在互联网上搜索我当时忘记的解决方案.
解决此问题需要您在ConsoleClient项目中安装EntityFramework NuGet包.
所以,我的问题不在于修复是什么,而是为什么?因为它没有任何意义!
仅仅为了完整起见,我使用的是实体框架的v6.1.3.但是,多年来我在早期版本中也多次看到过这个错误.
更新
看来,这个问题只有当你使用的using代码块,是为了呼吁Dispose上IDisposable秒.
要测试该假设,请使用以下代码创建一个控制台应用程序,该应用程序在同一解决方案中引用ClassLibrary1,该解决方案在同一解决方案中引用ClassLibrary2:
using ClassLibrary1;
using System;
namespace TestHypothesis1
{
class Program
{
// Testing the hypothesis presented in this answer: http://stackoverflow.com/a/38130945/303685
// This seems to be the behavior with just (or may be even others I haven't tested for) …Run Code Online (Sandbox Code Playgroud) 我使用的是C#语法,但这个问题并不仅限于C#.
例1
public static long Do(long n)
{
var sqrt = (long)Math.Sqrt(n);
for(long i = 0; i < sqrt; i++)
// do something
return result;
}
Run Code Online (Sandbox Code Playgroud)
这仍然是线性时间,即使在最坏的情况下,我们只做平方根时间的操作n,这只是一小部分n?
例2
您将如何对下面算法的时间复杂度进行分类?
public static long Do(long n)
{
while (n > 1)
{
n = (long)Math.Sqrt(n);
// do something
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
在最坏的情况下,这会被称为在对数时间内完成的操作,即使我们再一次不仅仅是将迭代次数减半,而是将它们减少一个数量级,而不仅仅是一半.
c# ×7
.net ×3
c#-4.0 ×2
algorithm ×1
asp.net ×1
asp.net-mvc ×1
big-o ×1
c#-3.0 ×1
caching ×1
clr ×1
code-first ×1
com-interop ×1
cryptography ×1
cryptojs ×1
enumerator ×1
http ×1
http-headers ×1
ienumerator ×1
javascript ×1
linq ×1
reflection ×1