STRUCT COM ARRAY
Pessoal, venho aqui mais uma vez pedir um help. coisa boba eu acho
Então, eu não consigo declarar um array de um Struct, fica dando o seguinte erro
Então, eu não consigo declarar um array de um Struct, fica dando o seguinte erro
Citação:[txt-color=#e80000]Referência de objeto não definida para uma instância de um objeto.[/txt-color]
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public struct Minha
{
public int a;
public int b;
}
public Minha[] myvar;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
myvar[0] = new Minha();
}
}
}
CLEVERTON,
O código acima funcionou normalmente na minha máquina...
... será que está faltando algum referência?
[][ô]s,
Tunusat.
O código acima funcionou normalmente na minha máquina...
... será que está faltando algum referência?
[][ô]s,
Tunusat.
CLEVERTON,
Anexei o projeto inteiro aqui.
Por favor, veja.
[][ô]s,
Tunusat.
Anexei o projeto inteiro aqui.
Por favor, veja.
[][ô]s,
Tunusat.
Porque ao invés de array, onde você deve controlar posicionamentos e toda essa trabalheira, você não usa List<Minha>:
Então, quando e se precisar que seja mesmo um array, você pode fazer a conversão:
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public struct Minha
{
public int a;
public int b;
}
public List<Minha> myvar = new List<Minha>();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
myvar.Add(new Minha());
}
}
}
Então, quando e se precisar que seja mesmo um array, você pode fazer a conversão:
myvar.ToArray();
TUNUSAT
O Código no VS2013 funciona beleza, mas eu uso o 2008, será que o problema está referido a alguma versão do framework ?
KERPLUNK
Desta forma funciona de boa, mas porque será que funciona no VS2013 o mesmo código que eu passei lá em cima ? será alguma referência faltando ?
O Código no VS2013 funciona beleza, mas eu uso o 2008, será que o problema está referido a alguma versão do framework ?
KERPLUNK
Desta forma funciona de boa, mas porque será que funciona no VS2013 o mesmo código que eu passei lá em cima ? será alguma referência faltando ?
private void button1_Click(object sender, EventArgs e)
{
Minha mystru;
mystru.a = 1; mystru.b = 2;
myvar.Add(mystru);
MessageBox.Show(myvar[0].b.ToString());
}
CLEVERTON,
Eu estou usando VS2010.
Segundo o site da Microsoft MSDN:
Versões e dependências do .NET Framework
A diferença é que o VS2008 usa o framework 3.5 e o VS2010 o framework 4.0.
[Ô]Nova versão do CLR introduzida, bibliotecas de classe de base expandida e novos recursos como a Managed Extensibility Framework (MEF), tempo de execução de linguagem dinâmica (DLR) e contratos de código.[Ô]
Mas ai até que ponto influencia no seu caso ... não sei ...
[][ô]s,
Tunusat.
Eu estou usando VS2010.
Segundo o site da Microsoft MSDN:
Versões e dependências do .NET Framework
A diferença é que o VS2008 usa o framework 3.5 e o VS2010 o framework 4.0.
[Ô]Nova versão do CLR introduzida, bibliotecas de classe de base expandida e novos recursos como a Managed Extensibility Framework (MEF), tempo de execução de linguagem dinâmica (DLR) e contratos de código.[Ô]
Mas ai até que ponto influencia no seu caso ... não sei ...
[][ô]s,
Tunusat.
private void button1_Click(object sender, EventArgs e)
{
Minha mystru;
mystru.a = 1; mystru.b = 2;
myvar.Add(mystru);
MessageBox.Show(myvar.[txt-color=#e80000]ToArray()[/txt-color][0].b.ToString());
}
Como eu disse, quando precisar usar sua lista como array, use o método ToArray()
O seu código não deve funcionar independente da versão do VS.Net ou Framework usado, se funcionou em algum outro então você fez algo de diferente
O seu problema ali é o seguinte, você declarou a variável
public Minha[] myvar;
Ela está apenas declarada, nunca foi inicializada com valor nenhum, logo ela é nula
Então você tenta acessar a posição 0 do array e tenta atribuir um valor a ele
myvar[0] = new Minha();
o problema ai é que myvar ainda não foi instanciado, ele é null e ao tentar acessar ele ocorre uma NullReferenceException, o que você precisa fazer é instanciar o array antes de usar, o mais simples seria na hora de declarar a variável por exemplo
public Minha[] myvar = new Minha[10];
Assim você estaria criando um array com 10 posições (0 a 9), cabe ai a você saber quantas posições precisa dentro deste array, mas o ideal mesmo ainda acho que seria usar o List<T> como o KERPLUNK falou
O seu problema ali é o seguinte, você declarou a variável
public Minha[] myvar;
Ela está apenas declarada, nunca foi inicializada com valor nenhum, logo ela é nula
Então você tenta acessar a posição 0 do array e tenta atribuir um valor a ele
myvar[0] = new Minha();
o problema ai é que myvar ainda não foi instanciado, ele é null e ao tentar acessar ele ocorre uma NullReferenceException, o que você precisa fazer é instanciar o array antes de usar, o mais simples seria na hora de declarar a variável por exemplo
public Minha[] myvar = new Minha[10];
Assim você estaria criando um array com 10 posições (0 a 9), cabe ai a você saber quantas posições precisa dentro deste array, mas o ideal mesmo ainda acho que seria usar o List<T> como o KERPLUNK falou
Para complementar o que os colegas colocaram, por que você não usa um Point no lugar do Struct?
Por exemplo:
public Point[] myvar = new Point[10];
private void Form1_Load(object sender, EventArgs e)
{
myvar[0] = new Point(a, b);
}
Por exemplo:
public Point[] myvar = new Point[10];
private void Form1_Load(object sender, EventArgs e)
{
myvar[0] = new Point(a, b);
}
Citação::
CLEVERTON,
O código acima funcionou normalmente na minha máquina...
... será que está faltando algum referência?
[][ô]s,
Tunusat.
Tuna, aki também, mas se vc colocar um breakpoint no load do form ele nem está passando.
Mas não acusou erro nenhum tbem.
FOXMAN,
Vixe! Fui olhar ... coloquei um breakpoint na linha:
E ele pára nesta linha ... mas as linhas abaixo que eu coloquei ele NÃO passa! E não mostra o box de mensagem!
Será que ele pula e não fala nada?!? Não dá mensagem de erro ... vou experimentar colocar um [Ô]TRY[Ô].
Caramba! Caiu no [Ô]catch[Ô] ... mancada minha!
Xiii ... falei besteira ... apareceu a mensagem agora:
Desculpa aê gente! Foi malz aê...
Yoda acabou de falar aqui: [Ô]Pesquisar mais preciso é.[Ô]
[][ô]s,
Tunusat.
Vixe! Fui olhar ... coloquei um breakpoint na linha:
myvar[0] = new Minha();
E ele pára nesta linha ... mas as linhas abaixo que eu coloquei ele NÃO passa! E não mostra o box de mensagem!
myvar[0].a = 1;
MessageBox.Show([Ô]Letra A: [Ô] + myvar[0].a);
myvar[0].b = 2;
Será que ele pula e não fala nada?!? Não dá mensagem de erro ... vou experimentar colocar um [Ô]TRY[Ô].
private void Form1_Load(object sender, EventArgs e)
{
try
{
myvar[0] = new Minha();
myvar[0].a = 1;
MessageBox.Show([Ô]Letra A: [Ô] + myvar[0].a);
myvar[0].b = 2;
}
catch (Exception ex)
{
MessageBox.Show([Ô]Mensagem: [Ô] + ex.Message);
}
}
Caramba! Caiu no [Ô]catch[Ô] ... mancada minha!
Xiii ... falei besteira ... apareceu a mensagem agora:
Citação:---------------------------
---------------------------
Mensagem: Object reference not set to an instance of an object.
---------------------------
OK
---------------------------
Desculpa aê gente! Foi malz aê...
Yoda acabou de falar aqui: [Ô]Pesquisar mais preciso é.[Ô]
[][ô]s,
Tunusat.
Tópico encerrado , respostas não são mais permitidas