Constructeur de type non trouvé
Message D'Exception: Constructor on type StateLog not found
.
J'ai le code suivant qui ne fonctionne pas pour une seule classe:
List<T> list = new List<T>();
string line;
string[] lines;
HttpWebResponse resp = (HttpWebResponse)HttpWebRequest.Create(requestURL).GetResponse();
using (var reader = new StreamReader(resp.GetResponseStream()))
{
while ((line = reader.ReadLine()) != null)
{
lines = line.Split(splitParams);
list.Add((T)Activator.CreateInstance(typeof(T), lines));
}
}
Le constructeur de la classe qu'il ne fonctionne pas exactement comme les autres classes pour qui il travaille. La seule différence est que cette classe sera passé 16 arguments au lieu de 2-5. Le constructeur semble que tels:
public StateLog(string[] line)
{
try
{
SessionID = long.Parse(line[0]);
AgentNumber = int.Parse(line[1]);
StateIndex = int.Parse(line[5]);
....
}
catch (ArgumentNullException anex)
{
....
}
}
Comme je l'ai dit, il travaille pour les 5 autres classes qui l'utilisent, la seule différence est le nombre d'entrées.
Sur une note plus sérieuse, peut-être vous devriez investir un peu de temps à nous dire comment il ne fonctionne pas. Les messages d'erreur?
Est
J'ai pensé avoir le message d'erreur pour la question du titre serait suffisant pour extrapoler la question. Sera mise à jour.
La ligne qu'il se passe sur en ferait une bien meilleure question. En s'appuyant sur les appelant à s'assurer que la pile a la bonne longueur, et contient des éléments qui sont parseable pour les types appropriés dans les bons postes dans ce tableau fait pour les erreurs de code. Il est générique et il est dangereux. Cette approche est dangereuse. Je vous garantis que d'ici demain, ou peut-être la prochaine journée, vous aurez oublié comment cela fonctionne. Quelqu'un d'autre à venir de ce code sera perdu. De l'OMI, de passer des tableaux comme paramètres est assez dangereuse.
votre constructeur n'accepte pas les 16 paramètres, mais un seul, de type string[].
Est
StateLog
classe visibles à partir de ce champ? N'ont d'autres surcharges de constructeur?J'ai pensé avoir le message d'erreur pour la question du titre serait suffisant pour extrapoler la question. Sera mise à jour.
La ligne qu'il se passe sur en ferait une bien meilleure question. En s'appuyant sur les appelant à s'assurer que la pile a la bonne longueur, et contient des éléments qui sont parseable pour les types appropriés dans les bons postes dans ce tableau fait pour les erreurs de code. Il est générique et il est dangereux. Cette approche est dangereuse. Je vous garantis que d'ici demain, ou peut-être la prochaine journée, vous aurez oublié comment cela fonctionne. Quelqu'un d'autre à venir de ce code sera perdu. De l'OMI, de passer des tableaux comme paramètres est assez dangereuse.
votre constructeur n'accepte pas les 16 paramètres, mais un seul, de type string[].
OriginalL'auteur JRLambert | 2014-08-29
Vous devez vous connecter pour publier un commentaire.
C'est parce que vous êtes à l'aide de la
Activateur.CreateInstance
surcharge qui accepte un tableau d'objets, qui est censé contenir une liste de paramètres du constructeur. En d'autres termes, il tente de trouver unStateLog
surcharge du constructeur qui a 16 paramètres, au lieu d'un. Cette compile en raison de la matrice de covariance.Ainsi, lorsque le compilateur voit cette expression:
depuis
lines
est unstring[]
, elle suppose que vous voulez compter sur la covariance de l'avoir jeté àobject[]
automatiquement, ce qui signifie que le compilateur voit effectivement comme ceci:La méthode va alors essayer de trouver un constructeur qui a un certain nombre de paramètres égale à
lines.Length
, tous de typestring
.Par exemple, si vous avez un de ces constructeurs:
Appel
Activator.CreateInstance(typeof(StateLog), new string[] { "a", "b", "c" })
va appeler le deuxième constructeur (l'une avec trois paramètres), au lieu de la première.Ce que vous voulez vraiment est de passer le ensemble
lines
ensemble comme le premier élément de tableau, effectivement:Bien sûr, vous pouvez simplement utiliser une ligne d'initialiseur de tableau:
string[]
que le paramètre de constructeur?Ces classes ont des ctor surcharges qui accepte plusieurs paramètres? Il n'y a pas beaucoup à elle, la méthode a tout simplement l'air d'un correspondant constructeur (où le nombre de paramètres et leurs types doivent correspondre).
Oui, mais le fait de celui-ci.
Il a une surcharge qui accepte 16
string
paramètres? 🙂Je reçois ce que vous dites maintenant. Son nombre de paramètres qui compte. J'aurais probablement obtenu qu'à peine avais-je plus de 3 heures de sommeil.
OriginalL'auteur Groo